Method and server for searching for data stream dividing point based on server

ABSTRACT

Embodiments of the present invention provide a method for searching for a data stream dividing point based on a server. In the embodiments of the present invention, a data stream dividing point is searched for by determining whether at least a part of data in a window of M windows meets a preset condition, and when the at least a part of data in the window does not meet the preset condition, a length of N*U is skipped, so as to obtain a next potential dividing point, thereby improving efficiency of searching for a data stream dividing point.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of International Application No. PCT/CN2014/072648, filed on Feb. 27, 2014, which claims priority to International Application No. PCT/CN2014/072115, filed on Feb. 14, 2014, both of which are hereby incorporated by reference in their entireties.

TECHNICAL FIELD

The present invention relates to the field of information technologies, and in particular, to a method and a server for searching for a data stream dividing point based on a server.

BACKGROUND

As data amounts keep growing, it becomes a critical challenge to provide sufficient data storage in the storage field currently. At present, a manner of addressing such a challenge is using a deduplication technology by means of a redundancy feature of data that needs to be stored, so as to reduce an amount of stored data.

In an algorithm of eliminating duplicate data based on a content defined chunk (CDC) in the prior art, a data stream to be stored is first divided into multiple data chunks. To divide a data stream into data chunks, a suitable dividing point needs to be found in the data stream, and data between two adjacent dividing points in the data stream forms one data chunk. A feature value of a data chunk is calculated, so as to find whether data chunks having a same feature value exist. If the data chunks having a same feature value are found, it is regarded that duplicate data exists. Specifically, in a technology of eliminating duplicate data based on a content defined chunk, a sliding window technique is applied to search for a dividing point of a chunk based on content of a file, that is, a Rabin fingerprint of data in a window is calculated to determine a data stream dividing point. It is assumed that a dividing point is searched for from left to right in a data stream. A fingerprint of data in a sliding window is calculated each time, and after a modulo operation is performed on a fingerprint value based on a given integer K, a result of the modulo operation is compared with a given remainder R. If the result of the modulo operation equals the given remainder R, the right end of the window is a data stream dividing point. Otherwise, the window continues to be slid rightward by one byte, and calculation and comparison are performed sequentially and cyclically until the end of the data stream is reached. In a process of eliminating duplicate data based on a content defined chunk, a large quantity of computing resources need to be consumed to search for a data stream dividing point, which therefore becomes a bottleneck in improving performance of eliminating duplicate data.

SUMMARY

According to a first aspect, an embodiment of the present invention provides a method for searching for a data stream dividing point based on a server, where a rule is preset on the server, where the rule is: for a potential dividing point k, determining M points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers; and the method includes:

(a) determining a point p_(iz) and a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] corresponding to the point p_(iz) for a current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M;

(b) determining whether at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z); and

when the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] does not meet the preset condition C_(z), skipping N minimum units U for searching for a data stream dividing point from the point p_(iz) along a direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥), so as to obtain a new potential dividing point, and performing step (a); and

(c) when at least a part of data in each window W_(ix)[p_(ix)−A_(x), p_(ix)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), selecting the current potential dividing point k_(i) as a data stream dividing point.

According to a second aspect, an embodiment of the present invention provides a method for searching for a data stream dividing point based on a server, where a rule is preset on the server, where the rule is: for a potential dividing point k determining M windows W_(x)[k_(i)−A_(x), k_(i)+B_(x)], and a preset condition C_(x) corresponding to the window W_(x)[k_(i)−A_(x), k_(i)+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers; and

the method includes:

(a) determining a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for a current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M;

(b) determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z); and

when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skipping N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along a direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, and performing step (a); and

(c) when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), selecting the current potential dividing point k_(i) as a data stream dividing point.

With reference to the second aspect, in a first possible implementation manner, the rule further includes that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f)| and C_(e)=C_(f).

With reference to the first possible implementation manner of the second aspect, in a second possible implementation manner, the rule further includes that A_(e) and A_(f) are positive integers.

With reference to the first possible implementation manner or the second possible implementation manner of the second aspect, in a third possible implementation manner, the rule further includes A_(e)−1=A_(f) and B_(e)+1=B_(f).

With reference to the second aspect, or any one of the first to third possible implementation manners of the second aspect, in a fourth possible implementation manner, the determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically includes:

determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

With reference to the fourth possible implementation manner of the second aspect, in a fifth possible implementation manner, the determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) is specifically: determining, by using a hash function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

With reference to the second aspect, or any one of the first to fifth possible implementation manners of the second aspect, in a sixth possible implementation manner, when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and according to the rule, a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], where the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.

With reference to the fourth possible implementation manner of the second aspect, in a seventh possible implementation manner, the determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically includes:

selecting F bytes in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, where F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes can be represented as:

$\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F*H},1} & a_{{F*H},2} & \ldots & a_{{F*H},8} \end{pmatrix},$

where when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, where a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as:

$\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{a\; F*H},1} & V_{{a\; F*H},2} & \ldots & V_{{a\; F*H},8} \end{pmatrix},$

F*H*8 random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F*H},1} & h_{{F*H},2} & \ldots & h_{{F*H},8} \end{pmatrix},$

random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1), S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

In the embodiments of the present invention, a data stream dividing point is searched for by determining whether at least a part of data in a window of M windows meets a preset condition, and when the at least a part of data in the window does not meet the preset condition, a length of N*U is skipped, so as to obtain a next potential dividing point, thereby improving efficiency of searching for a data stream dividing point.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1 is a schematic diagram of an application scenario according to an embodiment of the present invention;

FIG. 2 is a schematic diagram of a data stream dividing point;

FIG. 3 is a schematic diagram of searching for a data stream dividing point;

FIG. 4 is a schematic diagram of a method according to an embodiment of the present invention;

FIG. 5 and FIG. 6 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 7 and FIG. 8 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 9 and FIG. 10 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 11, FIG. 12, and FIG. 13 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 14 and FIG. 15 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 16 and FIG. 17 are schematic diagrams of determining whether at least a part of data in a window meets a preset condition;

FIG. 18 is a structural diagram of a deduplication server;

FIG. 19 is a structural diagram of a deduplication server;

FIG. 20 is a schematic diagram of a method according to an embodiment of the present invention;

FIG. 21 and FIG. 22 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 23 and FIG. 24 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 25 and FIG. 26 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 27, FIG. 28, and FIG. 29 are schematic diagrams of an implementation manner of searching for a data stream dividing point;

FIG. 30 and FIG. 31 are schematic diagrams of an implementation manner of searching for a data stream dividing point; and

FIG. 32 and FIG. 33 are schematic diagrams of determining whether at least a part of data in a window meets a preset condition.

FIG. 34 and FIG. 35 are schematic diagrams of probability that at least a part of data in a window meets a preset condition.

DESCRIPTION OF EMBODIMENTS

With ongoing progress of storage technologies, amounts of generated data grow increasingly, and a large amount of data has raised the highest requirement for storage capacity. Purchase costs of IT equipment increase along with storage capacity. To mitigate the demand conflict between the amounts of data and the storage capacity and lower purchase costs of IT equipment, a technology of eliminating duplicate data is introduced to the field of data storage.

A use scenario of an embodiment of the present invention is a data backup scenario. Data backup is a process of making, by using a backup server, a backup of data onto another storage medium to prevent data loss due to various reasons. FIG. 1 shows an architecture of a data backup system. The data backup system includes clients (101 a, 101 b, . . . , and 101 n), a backup server 102, a duplicate data elimination server (referred to as a deduplication server or a duplication elimination server for short) 103, and storage devices (104 a, 104 b, . . . , and 104 n). The clients (101 a, 101 b, . . . , and 101 n) may be application servers, work stations or the like. The backup server 102 is configured to make a backup of data generated by the clients. The deduplication server 103 is configured to execute a task of eliminating duplicate data for backup data. The storage devices (104 a, 104 b, . . . , and 104 n) serve as storage media that store data from which duplicate data has been eliminated, and may be storage media such as disk arrays and tape libraries. The clients (101 a, 101 b, . . . , and 101 n), the backup server 102, the duplicate data elimination server 103, and the storage devices (104 a, 104 b, . . . , and 104 n) may be connected in a manner such as by using a switch, a local area network, the Internet, or an optical fiber. The foregoing devices may be located at a same site, or may be located at different sites. The backup server 102, the duplication elimination server 103, and the storage devices (104 a, 104 b, . . . , and 104 n) may be independent physical devices, or may be physically integrated into a whole in specific implementation, or the backup server 102 and the duplication elimination server 103 are integrated into a whole, or the duplication elimination server 103 and the storage devices (104 a, 104 b, . . . , and 104 n) are integrated into a whole, or the like.

The deduplication server 103 performs an operation of eliminating duplicate data on a data stream of backup data, where the operation generally includes the following steps:

(1) searching for a data stream dividing point: searching for a data stream dividing point in a data stream according to a specific algorithm;

(2) performing division according to the found data stream dividing point to obtain data chunks;

(3) calculating a feature value of each data chunk: calculating the feature value of the data chunk, which serves as a feature for identifying the data chunk; and adding the feature value obtained by means of calculation to a data chunk feature list of a file corresponding to the data stream, where an SHA-1 or MD5 algorithm is generally used to calculate a feature value of a data chunk;

(4) detecting a same data chunk: comparing the feature value of the data chunk obtained by means of calculation with a feature value that already exists in the data chunk feature list to determine whether an identical data chunk exists; and

(5) eliminating duplicate data block: if it is found by detecting a same data chunk that a feature value the same as that of the data chunk exists in the data chunk feature list, skipping storage of the data chunk or determining whether to store the data chunk according to a storage quantity of duplicate data chunks that is determined according to a backup policy.

It can be known, from the step of performing, by the deduplication server 103, the operation of eliminating duplicate data on a data stream of backup data, that the search for a data stream dividing point, serving as a key step in the operation of eliminating duplicate data, directly determines performance of duplicate data elimination.

In an embodiment of the present invention, the deduplication server 103 receives a backup file sent by the backup server 102, and performs processing of eliminating duplicate data on the file. A backup file to be processed is usually presented in the form of a data stream on the deduplication server 103. When the deduplication server 103 searches for a dividing point in a data stream, a minimum unit for searching for a data stream dividing point usually needs to be determined. Specifically, as shown in FIG. 2, for example, a potential dividing point k₁ is located between two consecutive minimum units, whose sequence numbers are 1 and 2, for searching for a data stream dividing point. A potential dividing point refers to a point for which it needs to be determined whether the point can serve as a data stream dividing point. When the point k₁ is a data stream dividing point, in a direction of searching for a data stream dividing point shown by an arrow in FIG. 2, a next potential dividing point k₇ is searched for, that is, a point located between two consecutive minimum units, whose sequence numbers are 7 and 8, for searching for a data stream dividing point. When the potential dividing point k₇ is a data stream dividing point, data between the two adjacent data stream dividing points k₁, and k₇ is 1 data chunk. The minimum unit for searching for a data stream dividing point may specifically be determined according to an actual requirement, and here 1 byte is used as an example, that is, all the minimum units, whose sequence numbers are 1, 2, 7, and 8, for searching for a data stream dividing point have a size of 1 byte. The direction of searching for a data stream dividing point shown in FIG. 2 usually represents a search direction from a file header to a file trailer or a direction from a file trailer to a file header, and in this embodiment, the search direction from a file header to a file trailer is used as an example.

In a scenario of eliminating duplicate data, a smaller data chunk generally indicates a higher rate of eliminating duplicate data and an easier way to find a duplicate data chunk, but a larger amount of metadata generated from that; moreover, after a data chunk diminishes to a degree, the rate of eliminating duplicate data no longer increases, but the amount of metadata increases rapidly. Therefore, a size of a data chunk may be controlled. In actual applications, a minimum value of a data chunk, for example, 4 KB (4096 bytes), is usually set; in consideration of the rate of eliminating duplicate data at the same time, a maximum value of a data chunk is also set, that is, the size of a data chunk cannot exceed the maximum value, for example, 12 KB (12288 bytes). A specific implementation manner is shown in FIG. 3. The deduplication server 103 searches for a data stream dividing point along the direction shown by the arrow. k_(a) is a currently found data stream dividing point, and from k_(a), a next potential dividing point is searched for in the direction of searching for a data stream dividing point. To meet the requirement of a minimum data chunk, usually starting from a data stream dividing point, a size of the minimum data chunk is skipped along a direction of searching for a data stream dividing point, and the search starts from an end position of the minimum data chunk, that is, the end position of the minimum data chunk serves as a next potential dividing point k_(i). In this embodiment of the present invention, a minimum data chunk of 4 KB, that is, 4*1024=4096 bytes may be first skipped from the point k_(a) along the direction of searching for a data stream dividing point. 4096 bytes are skipped from the point k_(a) along the direction of searching for a data stream dividing point, and the point k_(i) is obtained at an end position of a 4096th byte to serve as a potential dividing point. For example, k_(i) is located between two consecutive minimum units, whose sequence numbers are 4096 and 4097, for searching for a data stream dividing point. Still using FIG. 3 as an example, k_(a) is a currently found data stream dividing point, and a next data stream dividing point is searched for along the direction shown in FIG. 3. If no next data stream dividing point is found after a maximum value of a data chunk is exceeded, starting from the point k_(a) in the direction of searching for a data stream dividing point, a point k_(z) at which the maximum value of a data chunk is reached serves as the next data stream dividing point and forced division is performed.

An embodiment of the present invention provides a method for searching for a data stream dividing point based on a deduplication server, which, as shown in FIG. 4, includes:

A rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining M points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers, where a distance between p_(x) and the potential dividing point k is d_(x) minimum units for searching for a data stream dividing point, the minimum unit for searching for a data stream dividing point is represented as U, and in this embodiment, U=1 byte. In an implementation manner shown in FIG. 3, about a value of M, in one implementation manner, a value of M*U is not greater than a preset maximum distance between two adjacent data stream dividing points, that is, a preset maximum length of a data chunk. It is determined whether at least a part of data in a window W_(z)[p_(z)−A_(z), p_(z)+B_(z)] corresponding to a point p_(z) meets a preset condition C_(z), where, z is an integer, 1≦z≦M, and (p_(z)−A_(z)) and (p_(z)+B_(z)) represent two boundaries of the window W_(z). When it is determined that at least a part of data in a window W_(z)[p_(z)−A_(z), p_(z)+B_(z)] of any one point p_(z) does not meet the preset condition C_(z), N bytes are skipped from the point p_(z) corresponding to the window W_(z)[p_(z)−A_(z), p_(z)+B_(z)] that does not meet the preset condition along a direction of searching for a data stream dividing point, where N≦∥B_(z)∥+max_(x)(∥A_(x)∥+∥(k−p_(x))∥), where ∥(k−p_(x))∥ represents a distance between any point of the M points p_(x) and the potential dividing point k, max_(x)∥A_(x)∥+∥(k−p_(x))∥) represents a maximum value of a sum of an absolute value of the distance between the any point of the M points p_(x) and the potential dividing point k and an absolute value of A_(x) corresponding to the any point, and ∥B_(z)∥ represents an absolute value of B_(z) in W_(z)[p_(z)−A_(z), p_(z)+B_(z)]. A principle for setting a value of N is specifically introduced in the following embodiments. When it is determined that at least a part of data in each window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] of the M windows meets the preset condition C_(x), the potential dividing point k is a data stream dividing point.

Specifically, for a current potential dividing point k_(i), the following steps are performed according to the rule:

Step 401: Determine a point p_(iz) and a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] corresponding to the point p_(iz) for a current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M.

Step 402: Determine whether at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z);

when the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] does not meet the preset condition C_(z), skip N minimum units U for searching for a data stream dividing point from the point p_(iz) along a direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥), so as to obtain a new potential dividing point, and perform step 401; and

when at least a part of data in each window W_(ix)[p_(ix)−A_(x), p_(ix)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), select the current potential dividing point k_(i) as a data stream dividing point.

Further, the rule further includes that at least two points p_(e) and p_(f) meet conditions A_(e)=A_(f), B_(e)=B_(f), and C_(e)=C_(f).

The rule further includes: relative to the potential dividing point k, the at least two points p_(e) and p_(f) are in a direction opposite to the direction of searching for a data stream dividing point.

The rule further includes that a distance between the at least two points p_(e) and p_(f) is 1 U.

The determining whether at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z) specifically includes:

determining, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z).

The determining, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z) is specifically: determining, by using a hash function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z).

When the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the point p_(iz) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and according to the rule, a left boundary of a window W_(ic)[p_(ic)−A_(c), p_(ic)+B_(c)] corresponding to a point p_(ic) that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] or a left boundary of a window W_(ic)[p_(ic)−A_(c), p_(ic)+B_(c)] corresponding to a point p_(ic) that is determined for the new potential dividing point falls within a range of the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)], where the point p_(ic) determined for the new potential dividing point is a point ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M points that are determined for the new potential dividing point according to the rule.

In this embodiment of the present invention, a data stream dividing point is searched for by determining whether at least a part of data in a window of M windows meets a preset condition, and when the at least a part of data in the window does not meet the preset condition, a length of N*U is skipped, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥), so as to obtain a next potential dividing point, thereby improving efficiency of searching for a data stream dividing point.

In a process of eliminating duplicate data, to ensure an even size of a data chunk, a size of an average data chunk (also referred to as an average chunk) is considered. That is, while limits on a size of a minimum data chunk and a size of a maximum data chunk are met, the size of the average data chunk is determined to ensure an even size of an obtained data chunk. A probability (represented as P(n)) of finding a data stream dividing point depends on two factors, that is, the quantity M of the points p_(x) and a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets the preset condition C_(x), where the former affects a length for skipping, the latter affects a probability of skipping, and the two together affect the size of the average chunk. Generally, when the size of the average chunk is fixed, as the quantity M of the points p_(x) increases, the probability that at least a part of data in a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to a single point p_(x) meets the preset condition C_(x) also increases. For example, the rule preset on the deduplication server 103 is: for a potential dividing point k, determining 11 points p_(x), where x indicates consecutive natural numbers from 1 to 11 separately, and a probability that at least a part of data in a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to any point p_(x) of the 11 points meets the preset condition C_(x) is ½. Another group of rules preset on the deduplication server 103 is: selecting 24 points p_(x) for the potential dividing point k, where x indicates consecutive natural numbers from 1 to 24 separately, and a probability that at least a part of data in a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to any point p_(x) of the 24 points meets the preset condition C_(x) is ¾. For the setting of a probability that at least a part of data in a specific window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] meets the preset condition C_(x), reference may be made to the description of the part of determining whether the at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] meets the preset condition C_(x). P(n) depends on the two factors, that is, the quantity M of points p_(x) and the probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets the preset condition C_(x), and P(n) represents a probability that no data stream dividing point is found after n minimum units for searching for a data stream dividing point in a search from a start position/previous data stream dividing point of a data stream. A process of calculating P(n) that depends on the two factors is actually an n-step Fibonacci sequence, which is described below in detail. After P(n) is obtained, 1−P(n) is a distribution function of a data stream dividing point, and (1−P(n))−(1−P(n−1))=P(n−1)−P(n) is a probability that a data stream dividing point is found at an nth point, that is, a density function of a data stream dividing point. Integration

$\sum\limits_{n = {4*1024}}^{12*1024}{n\left( {{P\left( {n - 1} \right)} - {P(n)}} \right)}$

may be performed according to the density function of a data stream dividing point, so as to obtain an expected length of a data stream dividing point, that is, the size of the average chunk, where 4*1024 (bytes) represents a length of the minimum data chunk, and 12*1024 (bytes) represents a length of the maximum data chunk.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 5, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] (window W for short) corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. A distance between the point p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between a point p₁ and the potential dividing point k is 0 byte, a distance between a point p₂ and the potential dividing point k 1 byte, a distance between a point p₃ and the potential dividing point k is 2 bytes, a distance between a point p₄ and the potential dividing point k is 3 bytes, a distance between a point p_(i5) and the potential dividing point k is 4 bytes, a distance between a point p_(i6) and the potential dividing point k is 5 bytes, a distance between a point p₇ and the potential dividing point k is 6 bytes, a distance between a point p₈ and the potential dividing point k is 7 bytes, a distance between a point p₉ and the potential dividing point k is 8 bytes, a distance between a point p₁₀ and the potential dividing point k is 9 bytes, a distance between a point p₁₁ and the potential dividing point k is 10 bytes, and relative to the potential dividing point k, all the points p₂, p₃, p₄, p₅, p₆, p₇, p₈, p₉, p₁₀, and p₁₁ are in a direction opposite to a direction of searching for a data stream dividing point. k_(a) is a data stream dividing point, and the direction of searching for a data stream dividing point shown in FIG. 5 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 5, 11 points are determined for the potential dividing point k_(i), and are p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) separately, and windows corresponding to the points p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11), are W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)] respectively. The foregoing windows are separately referred to as W_(i1), W_(i2), W_(i3), W_(i4), W_(i5), W_(i6), W_(i7), W_(i8), W_(i9), W_(i10), and W_(i11), for short. A distance between the point p_(ix) and the potential dividing point k_(i) is d_(x) bytes. Specifically, a distance between p_(i1) and k_(i) is 0 byte, a distance between p_(i2) and k_(i) is 1 byte, a distance between p_(i3) and k_(i) is 2 bytes, a distance between p_(i4) and k_(i) is 3 bytes, a distance between p_(i5), and k_(i) is 4 bytes, a distance between p_(i6) and k_(i) is 5 bytes, a distance between p_(i9) and k_(i) is 6 bytes, a distance between p_(i8) and k_(i) is 7 bytes, a distance between p_(i11) and k_(i) is 8 bytes, a distance between p_(i10) and k_(i) is 9 bytes, a distance between p_(i11) and k_(i) is 10 bytes, and relative to the potential dividing point k_(i), all p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁, it is determined whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, as shown in FIG. 6, at least a part of data in W_(i15)[p_(i5)−169, p_(i5)] does not meet the corresponding preset condition C₅, N bytes are skipped from the point p_(i5) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₅∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥). In an implementation manner shown in FIG. 6, the N bytes that are skipped are not greater than 179 bytes, and in this embodiment, N=11, so as to obtain a next potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According to the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 5, 11 points are determined for the potential dividing point k_(j), and are p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) separately, and windows corresponding to the points p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are determined, and are W_(j1)[p_(j1)−169, p_(j1)], W_(j2)[p_(j2)−169, p_(j2)], W_(j3)[p_(j3)−169, p_(j3)], W_(j4)[p_(j4)−169, p_(j4)], W_(j5)[p_(j5)−169, p_(j5)], W_(j6)[p_(j6)−169, p_(j6)], W_(j7)[p_(j7)−169, p_(j7)], W_(j8)[p_(j8)−169, p_(j8)], W_(j9)[p_(j9)−169, p_(j9)], W_(j10)[p_(j10)−169, p_(j10)], and W_(j11)[p_(j11)−169, p_(j11)] respectively. A distance between p_(jx) and the potential dividing point k_(j) is d_(x) bytes. Specifically, a distance between p_(j1) and k_(j) is 0 byte, a distance between p_(j2) and k_(j) is 1 byte, a distance between p_(j3) and k_(j) is 2 bytes, a distance between p_(j4) and k_(j) is 3 bytes, a distance between p_(j5) and k_(j) is 4 bytes, a distance between p_(j6) and k_(j) is 5 bytes, a distance between p_(j7) and k_(j) is 6 bytes, a distance between p_(j8) and k_(j) is 7 bytes, a distance between p_(j9) and k_(j) is 8 bytes, a distance between p_(j10) and k_(j) is 9 bytes, a distance between p_(j11) and k_(j) is 10 bytes, and relative to the potential dividing point k_(j), all p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are in a direction opposite to the direction of searching for a data stream dividing point. In the implementation manner shown in FIG. 6, when the 11th window W_(j11)[p_(j11)−169, p_(j11)] is determined for the potential dividing point k_(j), to ensure that a range between the potential dividing point k_(i) and the potential dividing point k_(j) all fall within a determining range, in this implementation manner, it may be ensured that a left boundary of the window W_(j11)[p_(j11)−169, p_(j11)] coincides with a right boundary p_(i5), of W_(i5)[p_(i5)−169, p_(i5),] or falls within a range of W_(i5)[p_(i5)−169, p_(i5)], where the point p_(j11) determined for the potential dividing point k_(j) is a point ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M points that are determined for the potential dividing point k_(j) according to the rule. Therefore, within such a limit, when the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, a distance for skipping from p_(i5), along the direction of searching for a data stream dividing point is not greater than ∥B₅∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥), where M=11, and 11*U is not greater than max_(x)∥A_(x)∥+∥(k_(i)−p_(ix))∥), and therefore, a distance for skipping from p_(i5), along the direction of searching for a data stream dividing point is not greater than 179. It is determined whether at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(jj) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103, whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, 11 bytes are skipped in a manner the same as that of k_(i) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

In the implementation manner shown in FIG. 5, according to the rule preset on the deduplication server 103, starting from determining whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁, when it is determined that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁, it is determined that the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂, it is determined that the at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃, it is determined that the at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets the preset condition C₄, and it is determined that the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 10 bytes are skipped from the point p_(i5), along the direction of searching for a data stream dividing point, and a new potential dividing point is obtained at an end position of a 10th byte, which is represented as k_(g) here for differentiation from other potential dividing points. According to the rule preset on the deduplication server 103, 11 points p_(gx) are determined for the potential dividing point k_(g), where x indicates consecutive natural numbers from 1 to 11 separately, and are p_(g1), p_(g2), p_(g3), p_(g4), p_(g5), p_(g6), p_(g7), p_(g8), p_(g9), p_(g10), and p_(g11) separately, and windows corresponding to the points p_(g1), p_(g2), p_(g3), p_(g4), p_(g5), p_(g6), p_(g7), p_(g8), p_(g9), p_(g10), and p_(g11) are determined, and are W_(g1)[p_(g1)−169, p_(g1)], W_(g2)[p_(g2)−169, p_(g2)], W_(g3)[p_(g3)−169, p_(g3)], W_(g4)[p_(g4)−169, p_(g4)], W_(g5)[p_(g5)−169, p_(g5)], W_(g6)[p_(g6)−169, p_(g6)], W_(g7)[p_(g7)−169, p_(g7)], W_(g8)[p_(g8)−169, p_(g8)], W_(g9)[p_(g9)−169, p_(g9)], W_(g10) [p_(g10)−169, p_(g10)], and W_(g11)[p_(g11)−169, p_(g11)] respectively. A distance between p_(gx) and the potential dividing point k_(g) is d_(x) bytes. Specifically, a distance between p_(g1) and k_(g) is 0 byte, a distance between p_(g2) and k_(g) is 1 byte, a distance between p_(g3) and k_(g) is 2 bytes, a distance between p_(g4) and k_(g) is 3 bytes, a distance between p_(g5) and k_(g) is 4 bytes, a distance between p_(g6) and k_(g) is 5 bytes, a distance between p_(g7) and k_(g) is 6 bytes, a distance between p_(g8) and k_(g) is 7 bytes, a distance between p_(g9) and k_(g) is 8 bytes, a distance between p_(g10) and k_(g) is 9 bytes, a distance between p_(g11) and k_(g) is 10 bytes, and relative to the potential dividing point k_(g), all p_(g2), p_(g3), p_(g4), p_(g5), p_(g6), p_(g7), p_(g8), p_(g9), p_(g10), and p_(g11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(g1)[p_(g1)−169, p_(g1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(g2)[p_(g2)−169, p_(g2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(g3)[p_(g3)−169, p_(g3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(g4)[p_(g4)−169, p_(g4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(g5)[p_(g5)−169, p_(g5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(g6)[p_(g6)−169, p_(g6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(g7)[p_(g7)−169, p_(g7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(g8)[p_(g8)−169, p_(g8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(g9)[p_(g9)−169, p_(g9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(g10)[p_(g10)−169, p_(g10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(g11)[p_(g11)−169, p_(g11)] meets the preset condition C₁₁. Therefore, the point p_(g11) corresponding to the potential dividing point k_(g) coincides with the point p_(i5) corresponding to the potential dividing point k_(i), the window W_(g11) [p_(g11)−169, p_(g11)] corresponding to the point p_(g11) coincides with the window W_(i5)[p_(i5)−169, p_(i5)] corresponding to the point p_(i5), and C₅=C₁₁; therefore, for the potential dividing point k_(i), when it is determined that the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, the potential dividing point k_(g) obtained by skipping 10 bytes from the point p_(i5), along the direction of searching for a data stream dividing point still does not meet a condition of serving as a data stream dividing point. Therefore, if repeated calculation exists when 10 bytes are skipped from the point p_(i5) along the direction of searching for a data stream dividing point, then repeated calculation can be reduced and efficiency is higher when 11 bytes are skipped from the point p_(i5) along the direction of searching for a data stream dividing point. Therefore, a speed of searching for a data stream dividing point is increased. When a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) that is determined according to the preset rule meets the preset condition C_(x) is ½, that is, a probability of executing skipping is ½, at most 179 bytes can be skipped each time.

In this implementation manner, a preset rule is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to 11 separately, where a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets the preset condition is ½, and P(n) can be calculated by using the two factors, that is, the quantity of points p_(x) and the probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets the preset condition. Moreover, A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁, where a distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p_(x) and the potential dividing point k is 0 byte, a distance between p₂ and k is 1 byte, a distance between p₃ and k is 2 bytes, a distance between p₄ and k is 3 bytes, a distance between p₅ and k is 4 bytes, a distance between p₆ and k is 5 bytes, a distance between p₇ and k is 6 bytes, a distance between p₈ and k is 7 bytes, a distance between p₉ and k is 8 bytes, a distance between p₁₀ and k is 9 bytes, a distance between p₁₁ and k is 10 bytes, and relative to the potential dividing point k, all p₂, p₃, p₄, p₅, p₆, p₇, p₈, p₉, p₁₀, and p₁₁ are in a direction opposite to the direction of searching for a data stream dividing point. Therefore, whether the potential dividing point k is a data stream dividing point depends on whether it exists that at least a part of data in each window of windows corresponding to the 11 consecutive points meets the preset condition C_(x). After a minimum chunk length of 4096 bytes is skipped from a start position/previous data stream dividing point of a data stream, a 4086th point is found by going back by 10 bytes in a direction opposite to the direction of searching for a data stream dividing point, and no data stream dividing point exists at the point; therefore, P(4086)=1, and P(4087)=1, . . . , P(4095)=1, and so on. At an 4096th point, that is, a point which is used to obtain the minimum chunk, with a probability of (½)̂11, at least a part of data in each window of the windows corresponding to the 11 points meets the preset condition C_(x). Hence, with a probability of (½)̂11, a data stream dividing point exists; with a probability of 1−(½)̂11, no data stream dividing point exists; therefore P(11)=1−(½)̂11.

As shown in FIG. 34, at an nth point, there may be 12 cases of obtaining P(n) by means of recursion.

Case 1: With a probability of ½, at least a part of data in a window corresponding to the nth point does not meet a preset condition; in this case, with a probability of P(n−1), 11 consecutive points do not exist among (n−1) points before the nth point, where at least a part of data in each window of windows corresponding to the 11 consecutive points separately meets a preset condition. Therefore, P(n) includes ½*P(n−1). A case in which the at least a part of data in the window corresponding to the nth point does not meet the preset condition, and 11 consecutive points exist among the (n−1) points before the nth point, where at least a part of data in each window of windows corresponding to the 11 consecutive points separately meets the preset condition, is not related to P(n).

Case 2: With a probability of ½, at least a part of data in a window corresponding to the nth point meets a preset condition, and with the probability of ½, at least a part of data in a window corresponding to an (n−1)th point does not meet a preset condition; in this case, with a probability of P(n−2), 11 consecutive points do not exist among (n−2) points before the (n−1) point, where at least a part of data in each window of windows corresponding to 11 consecutive points separately meets a preset condition. Therefore, P(n) includes ½*½*P(n−2). A case in which the at least a part of data in the window corresponding to the nth point meets the preset condition, the at least a part of data in the window corresponding to the (n−1)th point does not meet the preset condition, and 11 consecutive points exist among the (n−2) points before the (n−1)th point, where at least a part of data in each window of windows corresponding to the 11 consecutive points separately meets the preset condition, is not related to P(n).

According to the foregoing description, case 11: With a probability of (½)̂10, at least a part of data in windows corresponding to nth to (n−9)th points meets a preset condition, and with a probability of ½, at least a part of data in a window corresponding to an (n−10)th point does not meet a preset condition; in this case, with a probability of P(n−11), 11 consecutive points do not exist among (n−11) points before the (n−10) point, where at least a part of data in each window of windows corresponding to the 11 consecutive points separately meets a preset condition. Therefore, P(n) includes (½)̂10*½*P(n−11). A case in which the at least a part of data in the windows corresponding to the nth to (n−9)th points meets the preset condition, the at least a part of data in the window corresponding to the (n−10)th point does not meet the preset condition, and 11 consecutive points exist among the (n−11) points before the (n−10)th point, where at least a part of data in each window of windows corresponding to the 11 consecutive points separately meets the preset condition, is not related to P(n).

Case 12: With a probability of (½)̂11, at least a part of data in windows corresponding to nth to (n−10)th points meets a preset condition, and this case is not related to P(n).

Therefore, P(n)=½*P(n−1)+(½)̂2*P(n−2)+ . . . +(½)̂11*P(n−11). Another preset rule is: for a potential dividing point k, determining 24 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to 24 separately, where a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p+B_(x)] corresponding to the point p_(x) meets the preset condition C_(x) is ¾, and P(n) can be calculated by using the two factors, that is, the quantity of points p_(x) and the probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), meets the preset condition. Moreover, A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉= . . . =C₂₂=C₂₃=C₂₄, where a distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p₁ and the potential dividing point k is 0 byte, a distance between p₂ and k is 1 byte, a distance between p₃ and k is 2 bytes, a distance between p₄ and k is 3 bytes, a distance between p₅ and k is 4 bytes, a distance between p₆ and k is 5 bytes, a distance between p₇ and k is 6 bytes, a distance between p₈ and k is 7 bytes, a distance between p₉ and k is 8 bytes, . . . , a distance between p₂₂ and k is 21 bytes, a distance between p₂₃ and k is 22 bytes, a distance between p₂₄ and k is 23 bytes, and relative to the potential dividing point k, all p₂, p₃, p₄, p₅, p₆, p₇, p₈, p₉, . . . , p_(i2), p₂₃, and p₂₄ are in a direction opposite to the direction of searching for a data stream dividing point. Therefore, whether the potential dividing point k is a data stream dividing point depends on whether it exists that at least a part of data in each window of windows corresponding to the 24 consecutive points meets the preset condition C_(x), and calculation can be performed by using the following formulas:

P(4073)=1,P(4074)=1, . . . ,P(4095)=1,P(4096)=1−(¾)̂24, and

P(n)=¼*P(n−1)+¼*(¾)*P(n−2)+ . . . +¼*(¾)̂23*P(n−24).

After calculation, P(5*1024)=0.78, P(11*1024)=0.17, and P(12*1024)=0.13. That is, if no data stream dividing point is found with a probability of 13% after a search proceeds to a point at a distance of 12 KB from a start position/previous data stream dividing point of a data stream, and forced division is performed. A density function of a data stream dividing point is obtained by using this probability, and after integration, it is obtained that on average, a data stream dividing point is found after a search proceeds to a point at a distance about 7.6 KB from the start position/previous data stream dividing point of the data stream, that is, an average chunk length is about 7.6 KB. Different from that at least a part of data in windows corresponding to 11 consecutive points meets a preset condition with a probability of ½, a conventional CDC algorithm can achieve an effect of an average chunk length being 7.6 KB only when one window meets a condition with a probability of ½̂12.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 7, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x) [p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to 11 separately, where a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets the preset condition C_(x) is ½, A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁, where a distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p₁ and the potential dividing point k is 2 bytes, a distance between p₂ and k is 3 bytes, a distance between p₃ and k is 4 bytes, a distance between p₄ and k is 5 bytes, a distance between p_(i5) and k is 6 bytes, a distance between p₆ and k is 7 bytes, a distance between p₇ and k is 8 bytes, a distance between p₈ and k is 9 bytes, a distance between p₉ and k is 10 bytes, a distance between p₁₀ and k is 1 byte, a distance between p₁₁ and k is 0 byte, and relative to the potential dividing point k, all p₁, p₂, p₃, p₄, p₅, p₆, p₇, p₈, p₉, and p₁₀ are in a direction opposite to a direction of searching for a data stream dividing point. k_(a) is a data stream dividing point, and the direction of searching for a data stream dividing point shown in FIG. 7 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 7, according to the preset rule, 11 points are determined for the potential dividing point k_(i), and are p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) separately, and windows corresponding to the points p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6),], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)] respectively. A distance between the point p_(ix) and the potential dividing point k_(i) is d_(ix) bytes. Specifically, a distance between p_(i1) and k_(i) is 2 bytes, a distance between p_(i2) and k_(i) is 3 bytes, a distance between p_(i3) and k_(i) is 4 bytes, a distance between p_(i4) and k_(i) is 5 bytes, a distance between p_(i5) and k_(i) is 6 bytes, a distance between p_(i6) and k_(i) is 7 bytes, a distance between p_(i7) and k_(i) is 8 bytes, a distance between p_(i8) and k_(i) is 9 bytes, a distance between p_(i9) and k_(i) is 10 bytes, a distance between p_(i10) and k_(i) is 1 byte, a distance between p_(i11) and k_(i) is 0 byte, and relative to the potential dividing point k_(i), all p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), and p_(i10) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁, it is determined whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, as shown in FIG. 8, that the at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] does not meet the preset condition C₃ and 11 bytes are skipped from the point p_(i3) along a direction of searching for a data stream dividing point is used as an example for description. As shown in FIG. 8, when it is determined that W₃ does not meet a preset condition, from p₃ that serves as a start point, N bytes are skipped along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₃∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥). In the implementation manner shown in FIG. 6, N bytes are skipped, and specifically are not greater than 179 bytes, and in this embodiment, N=11. A next potential dividing point is obtained at an end position of an 11th byte. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(i) here. According to the rule preset on the deduplication server 103, 11 points are determined for the potential dividing point k_(j), and are p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) separately, and windows corresponding to the points p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are determined, and are W_(j1)[p_(j1)−169, p_(j1)], W_(j2)[p_(j2)−169, p_(j2)], W_(j3)[p_(j3)−169, p_(j3)], W_(j4)[p_(j4)−169, p_(j4)], W_(j5)[p_(j5)−169, p_(j5)], W_(j6)[p_(j6)−169, p_(j6)], W_(j7)[p_(j7)−169, p_(j7)], W_(j8)[p_(j8)−169, p_(j8)], W_(j9)[p_(j9)−169, p_(j9)], W_(j10)[p_(j10)−169, p_(j10)], and W_(j11)[p_(j11)−169, p_(j11)] respectively. A distance between p_(jx) and the potential dividing point k_(j) is d_(x) bytes. Specifically, a distance between p_(j1) and k_(j) is 2 bytes, a distance between p_(j2) and k_(j) is 3 bytes, a distance between p_(j3) and k_(j) is 4 bytes, a distance between p_(j4) and k_(j) is 5 bytes, a distance between p_(j5) and k_(j) is 6 bytes, a distance between p_(j6) and k_(j) is 7 bytes, a distance between p_(j7) and k_(j) is 8 bytes, a distance between p_(j8) and k_(j) is 9 bytes, a distance between p_(j9) and k_(j) is 10 bytes, a distance between p_(j10) and k_(j) is 1 byte, a distance between p_(j11), and k_(j) is 0 byte, and relative to the potential dividing point k_(j), all p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), and p_(j10) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103, whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, 11 bytes are skipped in a manner the same as that of k_(i) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point. Certainly, implementation of the method is restricted by a length of the maximum data chunk and a size of a file forming the data stream, which is not described herein again.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 9, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₉=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. A distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p₁ and the potential dividing point k is 3 bytes, a distance between p₂ and k is 2 bytes, a distance between p₃ and k is 1 byte, a distance between p₄ and k is 0 byte, a distance between p₅ and k is 1 byte, a distance between p₆ and k is 2 bytes, a distance between p₇ and k is 3 bytes, a distance between p₈ and k is 4 bytes, a distance between p₉ and k is 5 bytes, a distance between p₁₀ and k is 6 bytes, a distance between p₁₁ and k is 7 bytes, all p₅, p₆, p₇, p₈, p₉, p₁₀, and p₁₁ are, relative to the potential dividing point k, in a direction opposite to a direction of searching for a data stream dividing point, and all p₁, p₂, and p₃ are, relative to the potential dividing point k, in the direction of searching for a data stream dividing point. k_(a) is a data stream dividing point, and the direction of searching for a data stream dividing point shown in FIG. 9 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 9, 11 points are determined for a potential dividing point k_(i), and are p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) separately, and windows corresponding to the points p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)] respectively. A distance between p_(ix) and the potential dividing point k_(i) is d_(x) bytes. Specifically, a distance between p_(i1) and k_(i) is 3 bytes, a distance between p_(i2) and k_(i) is 2 bytes, a distance between p_(i3) and k_(i) is 1 byte, a distance between p_(i4) and k_(i) is 0 byte, a distance between p_(i5) and k_(i) is 1 byte, a distance between p_(i6) and k_(i) is 2 bytes, a distance between p_(i7) and k_(i) is 3 bytes, a distance between p_(i8) and k_(i) is 4 bytes, a distance between p_(i9) and k_(i) is 5 bytes, a distance between p_(i10) and k_(i) is 6 bytes, a distance between p_(i9) and k_(i) is 7 bytes, all p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are, relative to the potential dividing point k_(i), in a direction opposite to the direction of searching for a data stream dividing point, and all p_(i1), p_(i2), and p_(i3) are, relative to the potential dividing point k_(i), in the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁, it is determined whether at least a part of data in W_(i2)[p_(i2)−169, p₂] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5), meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, as shown in FIG. 10, at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] does not meet a corresponding preset condition, N bytes are skipped from the point p_(i7) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₄∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥). In an implementation manner shown in FIG. 10, N bytes that are skipped are specifically not greater than 179 bytes, and in this embodiment, specifically, N=8, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According to the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 9, 11 points are determined for the potential dividing point k_(i), and are p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) separately, and windows corresponding to the points p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are determined, and are W_(j1)[p_(j1)−169, p_(j1)], W_(j2)[p_(j2)−169, p_(j2)], W_(j3)[p_(j3)−169, p_(j3)], W_(j4)[p_(j4)−169, p_(j4)], W_(j5)[p_(j5)−169, p_(j5)], W_(j6)[p_(j6)−169, p_(j6)], W_(j7)[p_(j7)−169, p_(j7)], W_(j8)[p_(j8)−169, p_(j8)], W_(j9)[p_(j9)−169, p_(j9)], W_(j10)[p_(j10)−169, p_(j10)], and W_(j11)[p_(j11)−169, p_(j11)] respectively. A distance between p_(jx) and the potential dividing point k_(j) is d_(x) bytes. Specifically, a distance between p_(j1) and k_(j) is 3 bytes, a distance between p_(j2) and k_(j) is 2 bytes, a distance between p_(j3) and k_(j) is 1 byte, a distance between p_(j4) and k_(j) is 0 byte, a distance between p_(j5) and k_(j) is 1 byte, a distance between p_(j6) and k_(j) is 2 bytes, a distance between p_(j7) and k_(j) is 3 bytes, a distance between p_(j8) and k_(j) is 4 bytes, a distance between p_(j9) and k_(j) is 5 bytes, a distance between p_(j10) and k_(j) is 6 bytes, a distance between p_(j11) and k_(j) is 7 bytes, all p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are, relative to the potential dividing point k_(j), in a direction opposite to the direction of searching for a data stream dividing point, and all p_(j1), p_(j2), and p_(j3) are, relative to the potential dividing point k_(j), in the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103, whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, 8 bytes are skipped in a manner the same as that of k_(i) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 11, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x) [p_(x)−A_(x), p_(x)+B_(x)], where A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=169, A₁₁=182, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆C₇=C₈=C₉=C₁₀≠C₁₁. A distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p₁ and the potential dividing point k is 0 byte, a distance between p₂ and k is 1 byte, a distance between p₃ and k is 2 bytes, a distance between p₄ and k is 3 bytes, a distance between p₅ and k is 4 bytes, a distance between p₆ and k is 5 bytes, a distance between p₇ and k is 6 bytes, a distance between p₈ and k is 7 bytes, a distance between p₉ and k is 8 bytes, a distance between p₁₀ and k is 1 byte, a distance between p₁₁ and k is 3 bytes, all p₂, p₃, p₄, p₅, p₆, p₇, p₈, and p₉ are, relative to the potential dividing point k, in a direction opposite to a direction of searching for a data stream dividing point, and both p₁₀ and p₁₁ are, relative to the potential dividing point k, in the direction of searching for a data stream dividing point. k_(a) is a data stream dividing point, and the direction of searching for a data stream dividing point shown in FIG. 11 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 11, 11 points are determined for the potential dividing point k_(i), and are p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) separately, and windows corresponding to the points p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11), are W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−182, p_(i11)] respectively. A distance between p_(ix) and the potential dividing point k_(i) is d_(x) bytes. Specifically, a distance between p_(i1) and k_(i) is 0 byte, a distance between p_(i2) and k_(i) is 1 byte, a distance between p_(i3) and k_(i) is 2 bytes, a distance between p_(i4) and k_(i) is 3 bytes, a distance between p_(i5) and k_(i) is 4 bytes, a distance between p_(i6) and k_(i) is 5 bytes, a distance between p_(i7) and k_(i) is 6 bytes, a distance between p_(i8) and k_(i) is 7 bytes, a distance between p_(i9) and k_(i) is 8 bytes, a distance between p_(i10) and k_(i) is 1 byte, a distance between p_(i11) and k_(i) is 3 bytes, all p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), and p_(i9) are relative to the potential dividing point k_(i), in a direction opposite to the direction of searching for a data stream dividing point, and both p_(i10) and p_(i11) are, relative to the potential dividing point k_(i), in the direction of searching for a data stream dividing point. It is determined whether at least a part of data in the W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁, it is determined whether at least a part of data in the W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, it is determined whether at least a part of data in the W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in the W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in the W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in the W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in the W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in the W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in the W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in the W_(i10)[p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in the W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2), meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When it is determined that the at least a part of data in the window W_(i11) does not meet the preset condition C₁₁, 1 byte is skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. When the at least a part of data in any window of the 10 windows W_(i1), W_(i2), W_(i3), W_(i4), W_(i5), W_(i6), W_(i7), W_(i8), W_(i9), and W_(i10) does not meet the corresponding preset condition, for example, W_(i4)[p_(i4)−169, p_(i4)] shown in FIG. 12, N bytes are skipped from the point p_(i4) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₄∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥). In an implementation manner shown in FIG. 12, the N bytes that are skipped are specifically not greater than 179, and in this embodiment, specifically, N=9, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According to the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 11, 11 points are determined for the potential dividing point k_(j), and are p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) separately, and windows corresponding to the points p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p₁₀, and p_(j11) are determined, and are W_(j1)[p_(j1)−169, p_(j1)], W_(j2)[p_(j2)−169, p_(j2)], W_(j3)[p_(j3)−169, p_(j3)], W_(j4)[p_(j4)−169, p_(j4)], W_(j5)[p_(j5)−169, p_(j5)], W_(j6)[p_(j6)−169, p_(j6)], W_(j7)[p_(j7)−169, p_(j7)], W_(j8)[p_(j8)−169, p_(j8)], W_(j9)[p_(j9)−169, p_(j9)], W_(j10)[p_(j10)−169, p_(j10)], and W_(j11)[p_(j11)−182, p_(j8)] respectively. A distance between p_(jx) and the potential dividing point k_(j) is d_(x) bytes. Specifically, a distance between p_(j1) and k_(j) is 0 byte, a distance between p_(j2) and k_(j) is 1 byte, a distance between p_(j3) and k_(j) is 2 bytes, a distance between p_(j4) and k_(j) is 3 bytes, a distance between p_(j5) and k_(j) is 4 bytes, a distance between p_(j6) and k_(j) is 5 bytes, a distance between p_(j7) and k_(j) is 6 bytes, a distance between p_(j8) and k_(j) is 7 bytes, a distance between p_(j9) and k_(j) is 8 bytes, a distance between P_(j10) and k_(j) is 1 byte, a distance between p_(j11) and k_(j) is 3 bytes, all p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), P_(j7), p_(j8), and p_(j9) are, relative to the potential dividing point k_(j), in a direction opposite to the direction of searching for a data stream dividing point, and both p_(j10) and p_(j11) are, relative to the potential dividing point k_(j), in the direction of searching for a data stream dividing point. It is determined whether at least a part of data in the W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁, it is determined whether at least a part of data in the W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, it is determined whether at least a part of data in the W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, it is determined whether at least a part of data in the W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in the W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in the W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in the W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in the W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in the W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in the W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in the W_(j11)[p_(j11)−182, p_(j11)] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and it is determined, according to the rule preset on the deduplication server 103, whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, a next potential dividing point is obtained in a manner the same as that of k_(i), and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 13, a rule that is preset on a deduplication server 103 is: for a potential dividing point k, determining 11 points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to 11 separately, where a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x) meets a preset condition is ½, A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁, where a distance between p_(x) and the potential dividing point k is d_(x) bytes. Specifically, a distance between p₁ and the potential dividing point k is 0 byte, a distance between p₂ and k is 2 bytes, a distance between p₃ and k is 4 bytes, a distance between p₄ and k is 6 bytes, a distance between p₅ and k is 8 bytes, a distance between p₆ and k is 10 bytes, a distance between p₇ and k is 12 bytes, a distance between p₈ and k is 14 bytes, a distance between p₉ and k is 16 bytes, a distance between p₁₀ and k is 18 bytes, a distance between p₁₁ and k is 20 bytes, and relative to the potential dividing point k, all p₂, p₃, p₄, p₅, p₆, p₇, p₈, p₉, p₁₀, and p₁₁ are in a direction opposite to a direction of searching for a data stream dividing point. k_(a) is a data stream dividing point, and the direction of searching for a data stream dividing point shown in FIG. 13 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 13, according to the preset rule, 11 points are determined for the potential dividing point k_(i), and are p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) separately, and windows corresponding to the points p_(i1), p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)] respectively. A distance between p_(ix) and the potential dividing point k_(i) is d_(x) bytes. Specifically, a distance between p_(i1) and k_(i) is 0 byte, a distance between p_(i2) and k_(i) is 2 bytes, a distance between p_(i3) and k_(i) is 4 bytes, a distance between p_(i4) and k_(i) is 6 bytes, a distance between p_(i5) and k_(i) is 8 bytes, a distance between p_(i6) and k_(i) is 10 bytes, a distance between p_(i7), and k_(i) is 12 bytes, a distance between p_(i8) and k_(i) is 14 bytes, a distance between p_(i9) and k_(i) is 16 bytes, a distance between p_(i10) and k_(i) is 18 bytes, a distance between p_(i11) and k_(i) is 20 bytes, and relative to the potential dividing point k_(i), all p_(i2), p_(i3), p_(i4), p_(i5), p_(i6), p_(i7), p_(i8), p_(i9), p_(i10), and p_(i11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁, it is determined whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10) [p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, as shown in FIG. 14, the at least a part of data in W_(i4) [p_(i4)−169, p_(i4)] does not meet the preset condition C₄, a next potential dividing point is selected. For differentiation from the potential dividing point k_(i), the next potential dividing point is represented as k_(j) here, where k_(j) is located on the right of k_(i), and a distance between k_(j) and k_(i) is 1 byte. As shown in FIG. 14, according to the rule preset on the deduplication server 103, 11 points are determined for the potential dividing point k_(j), and are p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) separately, and windows corresponding to the points p_(j1), p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are determined, and are W_(j1)[p_(j1)−169, p_(j1)], W_(j2)[p_(j2)−169, p_(j2)], W_(j3)[p_(j3)−169, p_(j3)], W_(j4)[p_(j4)−169, p_(j4)], W_(j5)[p_(j5)−169, p_(j5)], W_(j6)[p_(j6)−169, p_(j6)], W_(j7)[p_(j7)−169, p_(j7)], W_(j8)[p_(j8)−169, p_(j8)], W_(j9)[p_(j9)−169, p_(j9)], W_(j10)[p_(j10)−169, p_(j10)], and W_(j11)[p_(j11)−169, p_(j11)] respectively, where A₁=A₂=A₃=A₄=A₅=A₆=A₇=A₈=A₉=A₁₀=A₁₁=169, B₁=B₂=B₃=B₄=B₅=B₆=B₇=B₈=B₉=B₁₀=B₁₁=0, and C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. A distance between p_(jx) and the potential dividing point k_(j) is d_(x) bytes. Specifically, a distance between p_(j1) and k_(j) is 0 byte, a distance between p_(j2) and k_(j) is 2 bytes, a distance between p_(j3) and k_(j) is 4 bytes, a distance between p_(j4) and k_(j) is 6 bytes, a distance between p_(j5) and k_(j) is 8 bytes, a distance between p_(j6) and k_(j) is 10 bytes, a distance between p_(j7) and k_(j) is 12 bytes, a distance between p_(j8) and k_(j) is 14 bytes, a distance between p_(j9) and k_(j) is 16 bytes, a distance between p_(j10) and k_(j) is 18 bytes, a distance between p_(j11) and k_(j) is 20 bytes, and relative to the potential dividing point k_(j), all p_(j2), p_(j3), p_(j4), p_(j5), p_(j6), p_(j7), p_(j8), p_(j9), p_(j10), and p_(j11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(j11)[p_(j1)−169, p_(j1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(x)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point. When it is determined that the at least a part of data in any window of the windows W_(j1) W_(j2), W_(j3), W_(j4), W_(j5), W_(j6), W_(j7), W_(j8), W_(j9), W_(j10), and W_(j11) does not meet the preset condition, for example, as shown in FIG. 15, when the at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] does not meet the preset condition C₃, the point p_(i4) is located on the left of the point p_(j3) relative to the direction of searching for a data stream dividing point, and 21 bytes are skipped from the point p_(i4) along the direction of searching for a data stream dividing point, so as to obtain a next potential dividing point. For differentiation from the potential dividing points k_(i) and k_(j), the next potential dividing point is represented as k_(i). According to the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 13, 11 points are determined for the potential dividing point k_(l), and are p_(l1), p_(l2), p_(l3), p_(l4), p_(l5), p_(l6), p_(l7), p_(l8), p_(l9), p_(l10), and p_(l11) separately, and windows corresponding to the points p_(l1), p_(l2), p_(l3), p_(l4), p_(l5), p_(l6), p_(l7), p_(l8), p_(l9), p_(l10), and p_(l11), are W_(l1)[p_(l1)−169, p_(l1)], W_(l2)[p_(l2)−169, p_(l2)], W_(l3)[p_(l3)−169, p_(l3)], W_(l4)[p_(l4)−169, p_(l4)], W_(l5)[p_(l5)−169, p_(l5)], W_(l6)[p_(l6)−169, p_(l6)], W_(l7)[p_(l7)−169, p_(l7)], W_(l8)[p_(l8)−169, p_(l8)], W_(l9)[p_(l9)−169, p_(l9)], W_(l10)[p_(l10)−169, p_(l10)], and W_(l11)[p_(l11)−169, p_(l11)] respectively, where a distance between p_(lx) and the potential dividing point k_(l) is d_(x) bytes. Specifically, a distance between p_(l1) and the potential dividing point k_(l) is 0 byte, a distance between p_(l2) and k_(l) is 2 bytes, a distance between p_(l3) and k_(l) is 4 bytes, a distance between p_(l4) and k_(l) is 6 bytes, a distance between p_(l5) and k_(l) is 8 bytes, a distance between p_(l6) and k_(l) is 10 bytes, a distance between p_(l7) and k_(l) 12 bytes, a distance between p_(l8) and k_(l) is 14 bytes, a distance between p_(l9) and k_(l) is 16 bytes, a distance between p_(l10) and k_(l) is 18 bytes, a distance between p_(l11) and k_(l) is 20 bytes, and relative to the potential dividing point k_(l), all p_(l2), p_(l3), p_(l4), p_(l5), p_(l6), p_(l7), p_(l8), p_(l9), p_(l10), and p_(l11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(l1)[p_(l1)−169, p_(l1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(l2)[p_(l2)−169, p_(l2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(l3)[p_(l3)−169, p_(l3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(l4)[p_(l4)−169, p_(l4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(l5)[p_(l5)−169, p_(l5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(l6)[p_(l6)−169, p_(l6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(l7)[p_(l7)−169, p_(l7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(l8)[p_(l8)−169, p_(l8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(l9)[p_(l9)−169, p_(l9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(l10)[p_(l10)−169, p_(l10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(l11)[p_(l11)−169, p_(l11)] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(l1) meets the preset condition C₁, the at least a part of data in the window W_(l2) meets the preset condition C₂, the at least a part of data in the window W_(l3) meets the preset condition C₃, the at least a part of data in the window W_(l4) meets the preset condition C₄, the at least a part of data in the window W_(l5) meets the preset condition C₅, the at least a part of data in the window W_(l6) meets the preset condition C₆, the at least a part of data in the window W_(l7) meets the preset condition C₇, the at least a part of data in the window W_(l8) meets the preset condition C₈, the at least a part of data in the window W_(l9) meets the preset condition C₉, the at least a part of data in the window W_(l10) meets the preset condition C₁₀, and the at least a part of data in the window W_(l11) meets the preset condition C₁₁, the current potential dividing point k_(l) is a data stream dividing point. When the at least a part of data in any window of the windows W_(l1), W_(l2), W_(l3), W_(l4), W_(l5), W_(l6), W_(l7), W_(l8), W_(l9), W_(l10), and W_(l11) does not meet the preset condition, a next potential dividing point is selected. For differentiation from the potential dividing points k_(i), k_(j), and k_(l), the next potential dividing point is represented as k_(m), where k_(m) is located on the right of k_(l), and a distance between k_(m) and k_(l) is 1 byte. According to the rule preset on the deduplication server 103 in the embodiment shown in FIG. 13, 11 points are determined for the potential dividing point k_(m), and are p_(m1), p_(m2), p_(m3), p_(m4), p_(m5), p_(m6), p_(m7), p_(m8), p_(m9), p_(m10), and p_(m11) separately, and windows corresponding to the points p_(m1), p_(m2), p_(m3), p_(m4), p_(m5), p_(m6), p_(m7), p_(m8), p_(m9), p_(m10), and p_(m11) are W_(m1)[p_(m1)−169, p_(m1)], W_(m2)[p_(m2)−169, p_(m2)], W_(m3)[p_(m3)−169, p_(m3)], W_(m4)[p_(m4)−169, p_(m4)], W_(m5)[p_(m5)−169, p_(m5)], W_(m6)[p_(m6)−169, p_(m6)], W_(m7)[p_(m7)−169, p_(m7)], W_(m8)[p_(m8)−169, p_(m8)], W_(m9)[p_(m9)−169, p_(m9)], W_(m10)[p_(m10)−169, p_(m10)], and W_(m11)[p_(m11)−169, p_(m11)] respectively, where a distance between p_(mx) and the potential dividing point k_(m) is d_(x) bytes. Specifically, a distance between p_(m1) and the potential dividing point k_(m) is 0 byte, a distance between p_(m2) and k_(m) is 2 bytes, a distance between p_(m3) and k_(m) is 4 bytes, a distance between p_(m4) and k_(m) is 6 bytes, a distance between p_(m5) and k_(m) is 8 bytes, a distance between p_(m6) and k_(m) is 10 bytes, a distance between p_(m7) and k_(m) is 12 bytes, a distance between p_(m8) and k_(m) 14 bytes, a distance between p_(m9) and k_(m) is 16 bytes, a distance between p_(m10) and k_(m) is 18 bytes, a distance between p_(m11) and k_(m) is 20 bytes, and relative to the potential dividing point k_(m), all p_(m2), p_(m3), p_(m4), p_(m5), p_(m6), p_(m7), p_(m8), p_(m9), p_(m10), and p_(m11) are in a direction opposite to the direction of searching for a data stream dividing point. It is determined whether at least a part of data in W_(m1)[p_(m1)−169, p_(m1)] meets the preset condition C₁, it is determined whether at least a part of data in W_(m2)[p_(m2)−169, p_(m2)] meets the preset condition C₂, it is determined whether at least a part of data in W_(m3)[p_(m3)−169, p_(m3)] meets the preset condition C₃, it is determined whether at least a part of data in W_(m4)[p_(m4)−169, p_(m4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(m5) [p_(m5)−169, p_(m5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(m6)[p_(m6)−169, p_(m6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(m7)[p_(m7)−169, p_(m7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(m8)[p_(m8)−169, p_(m8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(m9)[p_(m9)−169, p_(m9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(m10)[p_(m10)−169, p_(m10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(m11)[p_(m11)−169, p_(m11)] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(m1) meets the preset condition C₁, the at least a part of data in the window W_(m2) meets the preset condition C₂, the at least a part of data in the window W_(m3) meets the preset condition C₃, the at least a part of data in the window W_(m4) meets the preset condition C₄, the at least a part of data in the window W_(m5) meets the preset condition C₅, the at least a part of data in the window W_(m6) meets the preset condition C₆, the at least a part of data in the window W_(m7) meets the preset condition C₇, the at least a part of data in the window W_(m8) meets the preset condition C₈, the at least a part of data in the window W_(m9), meets the preset condition C₉, the at least a part of data in the window W_(m10) meets the preset condition C₁₀, and the at least a part of data in the window W_(m11) meets the preset condition C₁₁, the current potential dividing point k_(m) is a data stream dividing point. When the at least a part of data in any window does not meet the preset condition, skipping is executed according to the solution described above, so as to obtain a next potential dividing point, and it is determine whether the next potential dividing point is a data stream dividing point.

An embodiment of the present invention provides a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z). In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z), and the implementation manner shown in FIG. 5 is used as an example. According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to the point p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{255,1} & a_{255,2} & \ldots & a_{255,8} \end{pmatrix},$

where when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=, V_(am,n)=−1, where a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), and a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n), from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{a\; 255},1} & V_{{a\; 255},2} & \ldots & V_{{a\; 255},8} \end{pmatrix}.$

A large quantity of random numbers is selected to form a matrix, and once being formed, the matrix formed by the random numbers remains unchanged. For example, 255*8 random numbers are selected from random numbers that follow specific distribution (normal distribution is used as an example here) to form a matrix R:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

where random numbers of an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8). S_(a1), S_(a2), . . . , and S_(a255) are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(a1), S_(a2), . . . , and S_(a255) is counted. Because the matrix R follows normal distribution, S_(am) still follows normal distribution as the matrix R does. According to a probability theory, a probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(a1), S_(a2), . . . , and S_(a255) is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(a255) is an even number; a probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. When K is an odd number, it indicates that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] does not meet the preset condition C₁. C₁ here refers to that the quantity K, which is obtained according to the foregoing manner, of values greater than 0 among S_(a1), S_(a2), . . . , and S_(a255) is an even number. In the implementation manner shown in FIG. 5, for W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)], the windows are the same in size, that is, all the windows have a size of 169 bytes, and manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, as shown in FIG. 16, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as b_(m,1), . . . , and b_(m,8), representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} b_{1,1} & b_{1,2} & \ldots & b_{1,8} \\ b_{2,1} & b_{2,2} & \ldots & b_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ b_{255,1} & b_{255,2} & \ldots & b_{255,8} \end{pmatrix},$

where when b_(m,n)=1, V_(bm,n)=1, and when b_(m,n)=0, V_(bm,n)=−1, where b_(m,n) represents any one of b_(m,1), . . . , and b_(m,8), and a matrix V_(b) is obtained according to a conversion relationship between b_(m,n) and V_(bm,n) from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{b\; 1},1} & V_{{b\; 1},2} & \ldots & V_{{b\; 1},8} \\ V_{{b\; 2},1} & V_{{b\; 2},2} & \ldots & V_{{b\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{b\; 255},1} & V_{{b\; 255},2} & \ldots & V_{{b\; 255},8} \end{pmatrix}.$

A manner of determining whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition is the same as a manner of determining whether at least a part of data in the window W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition; therefore the matrix R is used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

and random numbers of an mth row of the matrix V_(b) and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(bm)=V_(bm,1)*h_(m,1)+V_(bm,2)*h_(m,2)+ . . . +V_(bm,8)*h_(m,8). S_(b1), S_(b2), . . . , and S_(b255) are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(b1), S_(b2), . . . , and S_(b255) is counted. Because the matrix R follows normal distribution, S_(bm) still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(b1), S_(b2), . . . , and S_(b255) is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(b1), S_(b2), . . . , and S_(b255) is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂. When K is an odd number, it indicates that the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] does not meet the preset condition C₂. C₂ here refers to that the quantity K, which is obtained according to the foregoing manner, of values greater than 0 among S_(b1), S_(b2), . . . , and S_(b255) is an even number. In the implementation manner shown in FIG. 3, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂.

Therefore, as shown in FIG. 16, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in the windows W_(i1)[p_(i1)−169, p_(i1)] and W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition is used to determine whether the at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition. As shown in FIG. 16, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in windows W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2),], and W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition is used to determine whether the at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets the preset condition C₄. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i4) [p_(i4)−169, p_(i4)] meets the preset condition C₄. As shown in FIG. 16, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in the windows W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], and W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition is used to determine whether the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets the preset condition C₅. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i5) [p_(i5)−169, p_(i5)] does not meet the preset condition C₅.

When the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5), along a direction of searching for a data stream dividing point, and a next potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, as shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as a_(m,1)′, . . . , and a_(m,8)′, representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} a_{1,1}^{\prime} & a_{1,2}^{\prime} & \ldots & a_{1,8}^{\prime} \\ a_{2,1}^{\prime} & a_{2,2}^{\prime} & \ldots & a_{2,8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ a_{255,1}^{\prime} & a_{255,2}^{\prime} & \ldots & a_{255,8}^{\prime} \end{pmatrix},$

where when a_(m,n)′=1, V_(am,n)′=1, and when a_(m,n)′=0, V_(am,n)′=−1, where a_(m,n)′ represents any one of a_(m,1)′, . . . , and a_(m,8)′, and a matrix V_(a)′ is obtained according to a conversion relationship between a_(m,n)′ and V_(am,n)′ from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{a\; 1},1}^{\prime} & V_{{a\; 1},2}^{\prime} & \ldots & V_{{a\; 1},8}^{\prime} \\ V_{{a\; 2},1}^{\prime} & V_{{a\; 2},2}^{\prime} & \ldots & V_{{a\; 2},8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{a\; 255},1}^{\prime} & V_{{a\; 255},2}^{\prime} & \ldots & V_{{a\; 255},8}^{\prime} \end{pmatrix}.$

A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets a preset condition is the same as a manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition. Therefore, the matrix R is used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

and random numbers of an mth row of the matrix V_(a)′ and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)′=V_(am,1)′*h_(m,1)+V_(am,2)′*h_(m,2)+ . . . +V_(a,8)′*h_(m,8). S_(a1)′, S_(a2)′, . . . , and S_(a255)′ are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is counted. Because the matrix R follows normal distribution, S_(am)′ still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. When K is an odd number, it indicates that the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] does not meet the preset condition C₁.

A manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as b_(m,1)′, . . . and b_(m,8)′, representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} b_{1,1}^{\prime} & b_{1,2}^{\prime} & \ldots & b_{1,8}^{\prime} \\ b_{2,1}^{\prime} & b_{2,2}^{\prime} & \ldots & b_{2,8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ b_{255,1}^{\prime} & b_{255,2}^{\prime} & \ldots & b_{255,8}^{\prime} \end{pmatrix},$

where when b_(m,n)′=1, V_(bm,n)′=1, and when b_(m,n)′=0, V_(bm,n)′=−1, where b_(m,n)′ represents any one of b_(m,1)′, . . . , and b_(m,8)′, and a matrix V_(b)′ is obtained according to a conversion relationship between b_(m,n)′ and V_(bm,n)′ from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{b\; 1},1} & V_{{b\; 1},2} & \ldots & V_{{b\; 1},8} \\ V_{{b\; 2},1} & V_{{b\; 2},2} & \ldots & V_{{b\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{b\; 255},1} & V_{{b\; 255},2} & \ldots & V_{{b\; 255},8} \end{pmatrix}.$

Manners of determining whether at least a part of data in windows W₂[p₂−169, p₂] and W₂[q₂−169, q₂] meets a preset condition are the same, and therefore the matrix R is still used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix}.$

Random numbers of an mth row of the matrix V_(b)′ and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(bm)′=V_(bm,1)′*h_(m,1)+V_(bm,2)′*h_(m,2)+ . . . +V_(bm,8)′*h_(m,8). S_(b1)′, S_(b2)′, . . . , and S_(b255)′ are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is counted. Because the matrix R follows normal distribution, S_(bm)′ still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. When K is an odd number, it indicates that the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] does not meet the preset condition C₂. Similarly, a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p₈] meets a preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets a preset condition C₁₁, which are not described herein again.

Still using the implementation manner shown in FIG. 5 as an example, a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z) is provided. In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. In one implementation manner, a hash function is used to calculate the 5 selected bytes, and values obtained by means of calculation by using the hash function are in fixed and even distribution. If a value obtained by means of calculation by using the hash function is an even number, it is determined that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁, that is, C₁ represents that a value obtained by means of calculation by using the hash function and according to the foregoing manner is an even number. Therefore, a probability that at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition is ½. In the implementation manner shown in FIG. 5, it is determined, by using a hash function, whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, and whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅. For specific implementation, reference may be made to the description of the manner of determining, by using a hash function, whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁ in the implementation manner shown in FIG. 5, which is not described herein again.

When the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. Therefore, as shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. The 5 bytes selected from the window W_(j1)[p_(j1)−169, p_(j1)] are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, a manner of determining whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. In FIG. 17, a manner of determining whether at least a part of data in W_(i3) [p_(i3)−169, p_(i3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. In FIG. 17, a manner of determining whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄ is the same as a manner of determining whether at least a part of data in the window W_(i4)[p_(i4)−169, p_(i4)] meets the preset condition C₄. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄. According to the foregoing method, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets a preset condition C₁₁, which are not described herein again.

Using the implementation manner shown in FIG. 5 as an example, a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z) is provided. In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁, a₂, a₃, a₄, and a₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(r) of a₁, a₂, a₃, a₄, and a₅ meets 0≦a_(r)≦255. a₁, a₂, a₃, a₄, and a₅ form a 1*5 matrix. 256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix R that is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

The matrix R is searched for a corresponding value according to the value of a₁ and a column in which a₁ is located. For example, if a₁=36, and a₁ is located in a 1st column, a value corresponding to h_(36,1) is searched for. The matrix R is searched for a corresponding value according to the value of a₂ and a column in which a₂ is located. For example, if a₂=48, and a, is located in a 2nd column, a value corresponding to h_(48,2) is searched for. The matrix R is searched for a corresponding value according to the value of a₃ and a column in which a₃ is located. For example, if a₃=26, and a₃ is located in a 3rd column, a value corresponding to h_(26,3) is searched for. The matrix R is searched for a corresponding value according to the value of a₄ and a column in which a₄ is located. For example, if a₄=26, and a₄ is located in a 4th column, a value corresponding to h_(26,4) is searched for. The matrix R is searched for a corresponding value according to the value of a₅ and a column in which a₅ is located. For example, if a₅=88, and a₅ is located in a 5th column, a value corresponding to h_(88,5) is searched for. S₁=h_(36,1)+h_(48,2)+h_(26,3)+h_(26,4)+h_(88,5), and because the matrix R follows binomial distribution, S₁ also follows binomial distribution. When S₁ is an even number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁; when S₁ is an odd number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] does not meet the preset condition C₁. A probability that S₁ is an even number is ½, and C₁ represents that S₁ that is obtained by means of calculation according to the foregoing manner is an even number. In the embodiment shown in FIG. 5, the at least a part of data in W_(i1) [p_(i1)−169, p_(i1)] meets the preset condition C₁. As shown in FIG. 16, “

” represents 1 byte separately selected when it is determined whether at least a part of data in a window W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂. In FIG. 16, bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁, b₂, b₃, b₄, and b₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(r) of b₁, b₂, b₃, b₄, and b₅ meets 0≦b_(r)≦255. b₁, b₂, b₃, b₄, and b₅ form a 1*5 matrix. In this implementation manner, manners of determining whether at least a part of data in W_(i1) and W_(i2) meets a preset condition are the same, and therefore, the matrix R is still used. The matrix R is searched for a corresponding value according to the value of b₁ and a column in which b₁ is located. For example, if b₁=66, and b₁ is located in a 1st column, a value corresponding to h_(66,1) is searched for. The matrix R is searched for a corresponding value according to the value of b₂ and a column in which b₂ is located. For example, if b₂=48, and b₂ is located in a 2nd column, a value corresponding to h_(48,2,) is searched for. The matrix R is searched for a corresponding value according to the value of b₃ and a column in which b₃ is located. For example, if b₃=99, and b₃ is located in a 3rd column, a value corresponding to h_(99,3) is searched for. The matrix R is searched for a corresponding value according to the value of b₄ and a column in which b₄ is located. For example, if b₄=26, and b₄ is located in a 4th column, a value corresponding to h_(26,4) is searched for. The matrix R is searched for a corresponding value according to the value of b₅ and a column in which b₅ is located. For example, if b₅=90, and b₅ is located in a 5th column, a value corresponding to h_(90,5) is searched for. S₂=h_(66,1)+h_(48,2)+h_(99,3)+h_(26,4)+h_(90,5), and because the matrix R follows binomial distribution, S₂ also follows binomial distribution. When S₂ is an even number, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂; when S₂ is an odd number, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] does not meet the preset condition C₂. A probability that S₂ is an even number is ½. In the embodiment shown in FIG. 5, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂. By using the same rule, separately, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10) [p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5), along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, as shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and it is determined whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁′, a₂′, a₃′, a₄′, and a₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(r)′ of a₁′, a₂′, a₃′, a₄′, and a₅′ meets 0≦a_(r)′≦255. a₁′, a₂′, a₃′, a₄′, and a₅′ form a 1*5 matrix. The manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁, and therefore, the matrix R is still used, and is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

The matrix R is searched for a corresponding value according to the value of a₁′ and a column in which a₁′ is located. For example, if a₁′=16, and a₁′ is located in a 1st column, a value corresponding to h_(16,1) is searched for. The matrix R is searched for a corresponding value according to the value of a₂′ and a column in which a₂′ is located. For example, if a₂′=98, and a₂′ is located in a 2nd column, a value corresponding to h_(98,2) is searched for. The matrix R is searched for a corresponding value according to the value of a₃′ and a column in which a₃′ is located. For example, if a₃′=56, and a₃′ is located in a 3rd column, a value corresponding to h_(56,3) is searched for. The matrix R is searched for a corresponding value according to the value of a₄′ and a column in which a₄′ is located. For example, if a₄′=36, and a₄′ is located in a 4th column, a value corresponding to h_(36,4) is searched for. The matrix R is searched for a corresponding value according to the value of a₅′ and a column in which a₅′ is located. For example, if a₅′=99, and a₅′ is located in a 5th column, a value corresponding to h_(99,5) is searched for. S₁′=h_(16,1)+h_(98,2)+h_(56,3)+h_(36,4)+h_(99,5), and because the matrix R follows binomial distribution, S₁′ also follows binomial distribution. When S₁′ is an even number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁; when S₁′ is an odd number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] does not meet the preset condition C₁. A probability that S₁′ is an even number is ½.

A manner of determining whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[p^(j2)−169, p_(j2)] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁′, b₂′, b₃′, b₄′, and b₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(r)′ of b₁′, b₂′, b₃′, b₄′, and b₅′ meets 0≦b_(r)′≦255. b₁′, b₂′, b₃′, b₄′ and b₅′ form a 1*5 matrix. The matrix R the same as that used when it is determined whether the at least a part of data in the window W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is used. The matrix R is searched for a corresponding value according to the value of b₁′ and a column in which b₁′ is located. For example, if b₁′=210, and b₁′ is located in a 1st column, a value corresponding to h_(210,1) is searched for. The matrix R is searched for a corresponding value according to the value of b₂′ and a column in which b₂′ is located. For example, if b₂′=156, and b₂′ is located in a 2nd column, a value corresponding to h_(156,2) is searched for. The matrix R is searched for a corresponding value according to the value of b₃′ and a column in which b₃′ is located. For example, if b₃′=144, and b₃′ is located in a 3rd column, a value corresponding to h_(144,3) is searched for. The matrix R is searched for a corresponding value according to the value of b₄′ and a column in which b₄′ is located. For example, if b₄′=60, and b₄′ is located in a 4th column, a value corresponding to h_(60,4) is searched for. The matrix R is searched for a corresponding value according to the value of b₅′ and a column in which b₅′ is located. For example, if b₅′=90, and b₅′ is located in a 5th column, a value corresponding to h_(90,5) is searched for. S₂′=h_(210,1)+h_(156,2)+h_(144,3)+h_(60,4)+h_(90,5). The same as the determining condition of S₂, when S₁′ is an even number, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and when S₂′ is an odd number, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] does not meet the preset condition C₂. A probability that S₂′ is an even number is ½.

Similarly, a manner of determining whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁, which are not described herein again.

Using the implementation manner shown in FIG. 5 as an example, a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z) is provided. In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁, a₂, a₃, a₄, and a₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(s) of a₁, a₂, a₃, a₄, and a₅ meets 0≦a_(s)≦255. a₁, a₂, a₃, a₄, and a₅ form a 1*5 matrix. 256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix R that is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix G that is represented as:

$\begin{pmatrix} g_{0,1} & g_{0,2} & \ldots & g_{0,5} \\ g_{1,1} & g_{1,2} & \ldots & g_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ g_{255,5} & g_{255,5} & \ldots & g_{255,5} \end{pmatrix}.$

According to the value of a₁ and a column in which a₁ is located, for example, a₁=36, and a₁ is located in a 1st column, the matrix R is searched for a value corresponding to h_(36,1), and the matrix G is searched for a value corresponding to g_(36,1). According to the value of a₂ and a column in which a₂ is located, for example, a₂=48, and a₂ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(48,2), and the matrix G is searched for a value corresponding to g_(48,2). According to the value of a₃ and a column in which a₃ is located, for example, a₃=26, and a₃ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(26,3), and the matrix G is searched for a value corresponding to g_(26,3). According to the value of a₄ and a column in which a₄ is located, for example, a₄=26, and a₄ is located in a 4th column, the matrix R is searched for a value corresponding to h_(26,4), and the matrix G is searched for a value corresponding to g_(26,4). According to the value of a₅ and a column in which a₅ is located, for example, a₅=88, and a₅ is located in a 5th column, the matrix R is searched for a value corresponding to h_(88,5), and the matrix G is searched for a value corresponding to g_(88,5). S_(1h)=h_(36,1)+h_(48,2)+h_(26,3)+h_(26,4)+h_(88,5), and because the matrix R follows binomial distribution, S_(1h) also follows binomial distribution. S_(1g)=g_(36,1)+g_(48,2)+g_(26,3)+g_(26,4)+g_(88,5), and because the matrix G follows binomial distribution, S_(1g) also follows binomial distribution. When one of S_(1h) and S_(1g) is an even number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁; when both S_(1h) and S_(1g) are odd numbers, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] does not meet the preset condition C₁, and C₁ indicates that one of S_(1h) and S_(1g) obtained according to the foregoing method is an even number. Because both S_(1h) and S_(1g) follow binomial distribution, a probability that S_(1h) is an even number is ½, a probability that S_(1g) is an even number is ½, and a probability that one of S_(1h) and S_(1g) is an even number is 1−¼=¾. Therefore, a probability that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁ is ¾. In the embodiment shown in FIG. 5, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In the implementation manner shown in FIG. 5, for W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)], the windows are the same in size, that is, all the windows have a size of 169 bytes, and meanwhile manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, as shown in FIG. 16, “

” represents 1 byte separately selected when it is determined whether at least a part of data in the window W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂. In FIG. 16, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁, b₂, b₃, b₄, and b₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(s) of b₁, b₂, b₃, b₄, and b₅ meets 0≦b_(s)≦255. b₁, b₂, b₃, b₄, and b₅ form a 1*5 matrix. In this implementation manner, manners of determining whether at least a part of data in each window meets a preset condition are the same, and therefore, the same matrices R and G are still used. According to the value of b₁ and a column in which b₁ is located, for example, b₁=66, and b₁ is located in a 1st column, the matrix R is searched for a value corresponding to h_(66,1), and the matrix G is searched for a value corresponding to g_(66,1). According to the value of b₂ and a column in which b₂ is located, for example, b₂=48, and b₂ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(48,2), and the matrix G is searched for a value corresponding to g_(48,2). According to the value of b₃ and a column in which b₃ is located, for example, b₃=99, and b₃ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(99,3), and the matrix G is searched for a value corresponding to g_(99,3). According to the value of b₄ and a column in which b₄ is located, for example, b₄=26, and b₄ is located in a 4th column, the matrix R is searched for a value corresponding to h_(26,4), and the matrix G is searched for a value corresponding to g_(26,4). According to the value of b₅ and a column in which b₅ is located, for example, b₅=90, and b₅ is located in a 5th column, the matrix R is searched for a value corresponding to h_(90,5), and the matrix G is searched for a value corresponding to g_(90,5). S_(2h)=h_(66,1)+h_(48,2)+h_(99,3)+h_(26,4)+h_(90,5), and because the matrix R follows binomial distribution, S_(2h) also follows binomial distribution. S_(2g)=_(66,1)+g_(48,2)+g_(99,3)+g_(26,4)+g_(90,5), and because the matrix G follows binomial distribution, S_(2g) also follows binomial distribution. When one of S_(2h) and S_(2g) is an even number, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂; when both S_(2h) and S_(2g) are odd numbers, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] does not meet the preset condition C₂. A probability that one of S_(2h) and S_(2g) is an even number is ¾. In the embodiment shown in FIG. 5, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂. By using the same rule, separately, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[p_(i10)−169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i5)[_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5), along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. Therefore, as shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and it is determined whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁′, a₂′, a₃′, a₄′, and a₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(s)′ of a₁′, a₂′, a₃′, a₄′, and a₅′ meets 0≦a_(s)′≦255. a₁′, a₂′ a₃′, a₄′, and a₅′ form a 1*5 matrix. The matrices R and G the same as those used when it is determined whether the at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁ are used, and are represented as:

$\quad\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}$

and

$\quad\begin{pmatrix} g_{0,1} & g_{0,2} & \ldots & g_{0,5} \\ g_{1,1} & g_{1,2} & \ldots & g_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ g_{255,5} & g_{255,5} & \ldots & g_{255,5} \end{pmatrix}$

respectively.

According to the value of a₁′ and a column in which a₁′ is located, for example, a₁′=16, and a₁′ is located in a 1st column, the matrix R is searched for a value corresponding to h_(16,1), and the matrix G is searched for a value corresponding to g_(16,1). According to the value of a₂′ and a column in which a₂′ is located, for example, a₂′=98, and a₂′ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(98,2), and the matrix G is searched for a value corresponding to g_(98,2). According to the value of a₃′ and a column in which a₃′ is located, for example, a₃′=56, and a₃′ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(56,3), and the matrix G is searched for a value corresponding to g_(56,3). According to the value of a₄′ and a column in which a₄′ is located, for example, a₄′=36, and a₄′ is located in a 4th column, the matrix R is searched for a value corresponding to h_(36,4), and the matrix G is searched for a value corresponding to g_(36,4). According to the value of a₅′ and a column in which a₅′ is located, for example, a₅′=99, and a₅′ is located in a 5th column, the matrix R is searched for a value corresponding to h_(99,5), and the matrix G is searched for a value corresponding to g_(99,5). S_(1h)′=h_(16,1)+h_(98,2)+h_(56,3)+h_(36,4)+h_(99,5), and because the matrix R follows binomial distribution, S_(1h)′ also follows binomial distribution. S_(1g)′=g_(16,1)+g_(98,2)+g_(56,3)+g_(36,4)+g_(99,5), and because the matrix G follows binomial distribution, S_(1g)′ also follows binomial distribution. When one of S_(1h)′ and S_(1g)′ is an even number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁; when both S_(1h)′ and S_(1g)′ are odd numbers, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] does not meet the preset condition C₁. A probability that one of S_(1h)′ and S_(1g)′ is an even number is ¾.

A manner of determining whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[p_(j2)−169, p₂] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. In FIG. 17, selected bytes are represented as sequence numbers 170, 128, 86, 44 and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁′, b₂′, b₃′, b₄′, and b₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(s)′ of b₁′, b₂′, b₃′, b₄′ and b₅′ meets 0≦b_(s)′≦255. b₁′, b₂′, b₃′, b₄′, and b₅′ form a 1*5 matrix. The matrices R and G the same as those used when it is determined whether the at least a part of data in the window W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ are used. According to the value of b₁′ and a column in which b₁′ is located, for example, b₁′=210, and b₁′ is located in a 1st column, the matrix R is searched for a value corresponding to h_(210,1), and the matrix G is searched for a value corresponding to g_(210,1). According to the value of b₂′ and a column in which b₂′ is located, for example, b₂′=156, and b₂′ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(156,2), and the matrix G is searched for a value corresponding to g_(156,2). According to the value of b₃′ and a column in which b₃′ is located, for example, b₃′=144, and b₃′ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(144,3), and the matrix G is searched for a value corresponding to g_(144,3). According to the value of b₄′ and a column in which b₄′ is located, for example, b₄′=60, and b₄′ is located in a 4th column, the matrix R is searched for a value corresponding to h_(60,4), and the matrix G is searched for a value corresponding to g_(60,4). According to the value of b₅′ and a column in which b₅′ is located, for example, b₅′=90, and b₅′ is located in a 5th column, the matrix R is searched for a value corresponding to h_(90,5), and the matrix G is searched for a value corresponding to g_(90,5). S_(2h)′=h_(210,1)+h_(156,2)+h_(144,3)+h_(60,4)+h_(90,5), S_(2g)′=g_(210,1)+g_(56,2)+g_(44,3)+g_(60,4)+g_(90,5). When one of S_(2h)′ and S_(2g)′ is an even number, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂; when both S_(2h)′ and S_(2g)′ are odd numbers, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] does not meet the preset condition C₂. A probability that one of S_(2h)′ and S_(2g)′ is an even number is ¾.

Similarly, a manner of determining whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5),] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁, which are not described herein again.

Using the implementation manner shown in FIG. 5 as an example, a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C is provided. In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are regarded as 40 sequential bits, which are represented as a₁, a₂, a₃, a₄, . . . , and a₄₀ separately. For any a_(t) of a₁, a₂, a₃, a₄, . . . and a₄₀, when a_(t)=0, V_(at)=−1, and when a_(t)=1, V_(at)=1. According to a correspondence between a_(t) and V_(at), V_(a1), V_(a2), V_(a3), V_(a4), . . . , and V_(a40) are generated. 40 random numbers are selected from random numbers that follow normal distribution, and are represented as: h₁, h₂, h₃, h₄, . . . , and h₄₀ separately. S_(a)=V_(a1)*h₁+V_(a2)*h₂+V_(a3)*h₃+V_(a4)*h₄+ . . . +V_(a40)*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(a) also follows normal distribution. When S_(a) is a positive number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁; when S_(a) is a negative number or 0, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] does not meet the preset condition C₁. A probability that S_(a) is a positive number is ½. In the embodiment shown in FIG. 5, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. As shown in FIG. 16, “

” represents 1 byte separately selected when it is determined whether at least a part of data in a window W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂. In FIG. 16, selected bytes are represented as sequence numbers 170, 128, 86, 44 and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are regarded as 40 sequential bits, which are represented as b₁, b₂, b₃, b₄, . . . , and b₄₀ separately. For any b_(t) of b₁, b₂, b₃, b₄, . . . , and b₄₀, when b_(t)=0, V_(bt)=−1, and when b_(t)=1, V_(bt)=1. V_(b1), V_(b2), V_(b3), V_(b4), . . . , and V_(b40) are generated according to a correspondence between b_(t) and V_(bt). A manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀. S_(b)=V_(b1)*h₁+V_(b2)*h₂+V_(b3)*h₃+V_(b4)*h₄+ . . . +V_(b4)*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(b) also follows normal distribution. When S_(b) is a positive number, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂; when S_(b) is a negative number or 0, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] does not meet the preset condition C₂. A probability that S_(b) is a positive number is ½. In the embodiment shown in FIG. 5, the at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂. By using the same rule, separately, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[p_(i6)−169, p_(i6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[p_(i7)−169, p_(i7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[p_(i8)−169, p_(i8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[p_(i9)−169, p_(i9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[p_(i10)169, p_(i10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[p_(i11)−169, p_(i11)] meets a preset condition C₁₁. In the implementation manner shown in FIG. 5, the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, as shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are regarded as 40 sequential bits, which are represented as a₁′, a₂′, a₃′, a₄′, . . . , and a₄₀′ separately. For any a₁′ of a₁′, a₂′, a₃′, a₄′, . . . , and a₄₀′, when a₁′=0, V_(at)′=−1, and when a_(t)′=1, V_(at)′=1. V_(a1)′, V_(a2)′, V_(a3)′, V_(a4)′, . . . , and V_(a40)′ are generated according to a correspondence between a_(t)′ and V_(at)′. The manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁, and therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀. S_(a)′=V_(a1)′*h₁+V_(a2)′*h₂+V_(a3)′*h₃+V_(a4)′*h₄+ . . . +V_(a40)′*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(a)′ also follows normal distribution. When S_(a)′ is a positive number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁; when S_(a)′ is a negative number or 0, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] does not meet the preset condition C₁. A probability that S_(a)′ is a positive number is ½.

The manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂. Therefore, as shown in FIG. 17, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. In FIG. 17, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are regarded as 40 sequential bits, which are represented as b₁′, b₂′, b₃′, b₄′, . . . , and b₄₀′ separately. For any b₁′ of b₁′, b₂′, b₃′, b₄′, . . . , and b₄₀′, when b_(t)′=0, V_(bt)′=−1, and when b_(t)′=1, V_(bt)′=1. V_(b1)′, V_(b2)′, V_(b3)′, V_(b4)′, . . . , and V_(b40)′ are generated according to a correspondence between b₁′ and V_(bt)′. The manner of determining whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is the same as the manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀. S_(b)′=V_(b1)′*h₁+V_(b2)′*h₂+V_(b3)′*h₃+V_(b4)′*h₄+ . . . +V_(b40)′*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(b)′ also follows normal distribution. When S_(b)′ is a positive number, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂; when S_(b)′ is a negative number or 0, the at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] does not meet the preset condition C₂. A probability that S_(b)′ is a positive number is ½.

Similarly, a manner of determining whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[p_(j6)−169, p_(j6)] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets the preset condition C₁₁, which are not described herein again.

Still using the implementation manner shown in FIG. 5 as an example, a method for determining whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z) is provided. In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). According to a rule preset on a deduplication server 103, a point p_(i1) and a window W_(i1)[p_(i1)−169, p_(i1)] corresponding to p_(i1) are determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets a preset condition C₁. As shown in FIG. 16, W_(i1) represents the window W_(i1)[p_(i1)−169, p_(i1)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. In FIG. 16, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. Each of the bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 is converted into 1 decimal number, the range of which is 0−(2̂40−1). An even distribution random number generator is used to generate 1 designated value for each decimal number in 0−(2̂40−1), and a correspondence R between each decimal number in 0−(2̂40−1) and the designated value is recorded. Once being designated, a designated value corresponding to a decimal number remains unchanged, and the designated value follows even distribution. If the designated value is an even number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁; if the designated value is an odd number, the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] does not meet the preset condition C₁. C₁ represents that the designated value obtained according to the foregoing method is an even number. Because a probability that a random number in even distribution is an even number is ½, a probability that the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁ is ½. In the implementation manner shown in FIG. 5, by using the same rule, separately, it is determined whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[p_(i4)−169, p_(i4)] meets a preset condition C₄, and it is determined whether at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] meets a preset condition C₅, which are not described herein again.

When the at least a part of data in W_(i5)[p_(i5)−169, p_(i5)] does not meet the preset condition C₅, 11 bytes are skipped from a point p_(i5) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of an 11th byte. As shown in FIG. 6, according to the rule preset on the deduplication server 103, a point p_(j1) and a window W_(j1)[p_(j1)−169, p_(j1)] corresponding to the point p_(j1) are determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. Therefore, the same correspondence R between each decimal number in 0−(2̂40−1) and a designated value is used. As shown in FIG. 17, W_(j1) represents the window W_(j1)[p_(j1)−169, p_(j1)], and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁. In FIG. 17, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. Each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 is converted into 1 decimal number, and R is searched for a designated value corresponding to the decimal number. If the designated value is an even number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁; if the designated value is an odd number, the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] does not meet the preset condition C₁. Because a probability that a random number in even distribution is an even number is ½, a probability that the at least a part of data in W_(j1)[p_(j1)−169, p_(j1)] meets the preset condition C₁ is ½. Similarly, a manner of determining whether at least a part of data in W_(i2)[p_(i2)−169, p_(i2)] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[p_(j2)−169, p_(j2)] meets the preset condition C₂, and a manner of determining whether at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[p_(j3)−169, p_(j3)] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[p_(j4)−169, p_(j4)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[p_(j5)−169, p_(j5)] meets the preset condition C₅, it is determined whether at least a part of data in W_(j16)[p_(j6)−169, p_(j6)] meets a preset condition C₆, it is determined whether at least a part of data in W_(j7)[p_(j7)−169, p_(j7)] meets a preset condition C₇, it is determined whether at least a part of data in W_(j8)[p_(j8)−169, p_(j8)] meets a preset condition C₈, it is determined whether at least a part of data in W_(j9)[p_(j9)−169, p_(j9)] meets a preset condition C₉, it is determined whether at least a part of data in W_(j10)[p_(j10)−169, p_(j10)] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[p_(j11)−169, p_(j11)] meets a preset condition C₁₁, which are not described herein again.

The deduplication server 103 in the embodiment of the present invention shown in FIG. 1 refers to an apparatus that can implement a technical solution described in an embodiment of the present invention, and as shown in FIG. 18, usually includes a central processing unit, a primary memory, and an input/output interface. The central processing unit, the primary memory, and the input/output interface communicate with each other. The main memory stores an executable instruction, and the central processing unit executes the executable instruction stored in the primary memory, so as to perform a specific function, for example, searching for a data stream dividing point described in FIG. 4 to FIG. 17 in the embodiments of the present invention. Therefore, as shown in FIG. 19, according to the embodiments of the present invention shown in FIG. 4 to FIG. 17, for the deduplication server 103, a rule is preset on the deduplication server 103, where the rule is: for a potential dividing point k, determining M points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers. The deduplication server 103 includes a determining unit 1901 and a judging and processing unit 1902. The determining unit 1901 is configured to perform step (a): (a) determining a point p_(iz) and a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] corresponding to the point p_(iz) for a current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M. The judging and processing unit 1902 is configured to: determine whether at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z);

when the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] does not meet the preset condition C_(z), skip N minimum units U for searching for a data stream dividing point from the point p_(iz) along a direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥+∥(k_(i)−p_(ix))∥), so as to obtain a new potential dividing point, where the determining unit performs step (a) for the new potential dividing point; and when at least a part of data in each window W_(ix)[p_(ix)−A_(x), p_(ix)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), select the current potential dividing point k_(i) as a data stream dividing point.

Further, the rule further includes that at least two points p_(e) and p_(f) meet conditions A_(e)=A_(f), B_(e)=B_(f), and C_(e)=C_(f). Further, the rule further includes: relative to the potential dividing point k, the at least two points p_(e) and p_(f) are in a direction opposite to the direction of searching for a data stream dividing point.

Further, the rule further includes that a distance between the at least two points p_(e) and p_(f) is 1 U.

Further, the judging and processing unit 1902 is specifically configured to determine, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). Specifically, the judging and processing unit 1902 is specifically configured to determine, by using a hash function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z). Specifically, that the judging and processing unit 1902 is specifically configured to determine, by using a random function, whether the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z) specifically includes:

selecting F bytes in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, where F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes may be represented as:

$\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F^{*}H},1} & a_{{F^{*}H},2} & \ldots & a_{{F^{*}H},8} \end{pmatrix}.$

where when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, where a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as:

$\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{{aF}^{*}H},1} & V_{{{aF}^{*}H},2} & \ldots & V_{{{aF}^{*}H},8} \end{pmatrix},$

random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F^{*}H},1} & h_{{F^{*}H},2} & \ldots & h_{{F^{*}H},8} \end{pmatrix},$

random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1), S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets the preset condition C_(z).

Further, the judging and processing unit 1902 is configured to: when the at least a part of data in the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] does not meet the preset condition C_(z), skip the N minimum units U for searching for a data stream dividing point from the point p_(iz) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and the determining unit 1901 performs step (a) for the new potential dividing point, where and according to the rule, a left boundary of a window W_(ic)[p_(ic)−A_(c), p_(ic)+B_(c)] corresponding to a point p_(ic) that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] or a left boundary of a window W_(ic)[p_(ic)−A_(c), p_(ic)+B_(c)] falls within a range of the window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)], where the point p_(ic) determined for the new potential dividing point is a point ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M points that are determined for the new potential dividing point according to the rule.

According to the method for searching for a data stream dividing point based on a server in the embodiments of the present invention shown in FIG. 4 to FIG. 17, a point p_(ix) and a window W_(ix)[p_(ix)−A_(x), p_(ix)+B_(x)] corresponding to the point p_(ix) are determined for a potential dividing point k_(i), where x indicates consecutive natural numbers from 1 to M separately, and M≧2. It may be determined in parallel whether at least a part of data in each window of M windows meets a preset condition C_(x), or it may be determined sequentially whether at least a part of data in windows meets a preset condition, or it may be first determined that at least a part of data in a window W_(i1)[p_(i1)−A₁, p_(i1)+B₁] meets a preset condition C₁, then it is determined that at least a part of data in W_(i2)[p_(i2)−A₂, p_(i2)+B₂] meets a preset condition C₂, until it is determined that at least a part of data in W_(im)[p_(im)−A_(m), p_(im)+B_(m)] meets a preset condition C_(m). Other windows in this embodiment are determined in a same manner as the above, which is not described again.

In addition, according to the embodiments of the present invention shown in FIG. 4 to FIG. 17, in actual applications, a rule is preset on the deduplication server 103, where the rule is: for a potential dividing point k, determining M points p_(x), a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to the point p_(x), and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to M separately, and M≧2. In the preset rule, A₁, A₂, A₃, . . . , and A_(m) may be not all equal, B₁, B₂, B₃, . . . , and B_(m) may be not all equal, and C₁, C₂, C₃, . . . , and C_(M) may also be not all the same. In the implementation manner shown in FIG. 5, for windows W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−169, p_(i11)], the windows are the same in size, that is, all the windows have a size of 169 bytes, and meanwhile manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[p_(i1)−169, p_(i1)] meets the preset condition C₁. However, in the implementation manner shown in FIG. 11, the windows W_(i1)[p_(i1)−169, p_(i1)], W_(i2)[p_(i2)−169, p_(i2)], W_(i3)[p_(i3)−169, p_(i3)], W_(i4)[p_(i4)−169, p_(i4)], W_(i5)[p_(i5)−169, p_(i5)], W_(i6)[p_(i6)−169, p_(i6)], W_(i7)[p_(i7)−169, p_(i7)], W_(i8)[p_(i8)−169, p_(i8)], W_(i9)[p_(i9)−169, p_(i9)], W_(i10)[p_(i10)−169, p_(i10)], and W_(i11)[p_(i11)−182, p_(i11)] may be different in size, and meanwhile the manners of determining whether at least a part of data in a window meets a preset condition may also be different. In all the embodiments, according to the rule preset on the deduplication server 103, a manner of determining whether at least a part of data in the window W_(i1) meets the preset condition C₁ is certainly the same as a manner of determining whether at least a part of data in a window W_(j1), meets the preset condition C₁, a manner of determining whether at least a part of data in W_(i2) meets the preset condition C₂ is certainly the same as a manner of determining whether at least a part of data in W_(j2) meets the preset condition C₂, . . . , and a manner of determining whether at least a part of data in a window W_(iM) meets a preset condition C_(M) is certainly the same as a manner of determining whether at least a part of data in a window W_(jM) meets the preset condition C_(M), which are not described herein again. Meanwhile, according to the embodiments of the present invention shown in FIG. 4 to FIG. 17, although M=11 is used as an example, the value of M is not limited to 11 according to an actual requirement, and a person skilled in the art determines the value of M according to the description in the embodiments of the present invention.

According to the embodiments of the present invention shown in FIG. 4 to FIG. 17, the rule is preset on the deduplication server 103, k_(a), k_(i), k_(j), k_(l), and k_(m) are potential dividing points obtained in the search for a dividing point along a direction of searching for a data stream dividing point, and k_(a), k_(i), k_(j), k_(l), and k_(m) all follow the rule. The window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] in this embodiment of the present invention represents a specific range, and data is selected in the specific range to determine whether the data meets the preset condition C_(x). Specifically, in the specific range, a part of data may be selected or all data may be selected to determine whether the data meets the preset condition C_(x). Reference may be made to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] for the concept of a window specifically used in this embodiment of the present invention, which is not described herein again.

According to the embodiments of the present invention shown in FIG. 4 to FIG. 17, in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], (p_(x)−A_(x)) and (p_(x)+B_(x)) represent two boundaries of the window W_(x)[_(x)−A_(x), p_(x)+B_(x)], where (p_(x)−A) represents a boundary, which is in a direction opposite to the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], and (p_(x)+B_(x)) represents a boundary, which is in the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)]. Specifically, in the embodiment of the present invention, the direction of searching for a data stream dividing point shown in FIG. 3 to FIG. 15 is from left to right; therefore, (p_(x)−A_(x)) represents a boundary (that is, a left boundary), which is in a direction opposite to the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], and (p_(x)+B_(x)) represents a boundary (that is, a right boundary), which is in the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)]. If the direction of searching for a data stream dividing point shown in FIG. 3 to FIG. 15 is from right to left, (p_(x)−A_(x)) represents a boundary (that is, a right boundary), which is in a direction opposite to the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], and (p_(x)+B_(x)) represents a boundary (that is, a left boundary), which is in the direction of searching for a data stream dividing point relative to the point p_(x), of the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)].

A person of ordinary skill in the art may be aware that, in conjunction with various exemplary units and algorithm steps described in the embodiments of the present invention, a key feature in the embodiments of the present invention may be combined with other technologies and presented in a more complex form; however, the key feature of the present invention is still included. An alternative dividing point may be used in a real environment. For example, in an implementation manner, according to a rule preset on a deduplication server 103, 11 points p_(x) are determined for a potential dividing point k_(i), where x indicates consecutive natural numbers from 1 to 11, and a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to p_(x) and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] are determined. When at least a part of data in each window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] of 11 windows meets the preset condition C_(x), the potential dividing point k_(i) is a data stream dividing point. When no dividing point is found when a set maximum data chunk is exceeded, a preset rule for the alternative point may be used in this case. The preset rule for the alternative point is similar to the rule preset on the deduplication server 103, and the preset rule for the alternative point is: for example, for a potential dividing point k_(i), 10 points p_(x) are determined, where x indicates consecutive natural numbers from 1 to 10, and a window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] corresponding to p_(x) and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] are determined. When at least a part of data in each window W_(x)[p_(X)−A_(x), p_(x)+B_(x)] of 10 windows meets the preset condition C_(x), the potential dividing point k_(i) is a data stream dividing point; when no data stream dividing point is found when a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

A rule is preset on the deduplication server 103, and in the rule, M points are determined for a potential dividing point k. It is not necessarily required that there be a potential dividing point k in advance, and the potential dividing point k may be determined by using the determined M points.

An embodiment of the present invention provides a method for searching for a data stream dividing point based on a deduplication server, which, as shown in FIG. 20, includes:

A rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining M windows W_(x)[p_(x)−A_(x), p_(x)+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers. In the implementation manner shown in FIG. 3, about a value of M, in one implementation manner, a value of M*U is not greater than a preset maximum distance between two adjacent data stream dividing points, that is, a preset maximum length of a data chunk. It is determined whether at least a part of data in a window W_(z)[k−A_(z), k_(j)+B_(z)] meets a preset condition C_(z), where, z is an integer, 1≦z≦M, and (k−A_(z)) and (k_(j)+B_(z)) separately represent two boundaries of the window W_(z). When it is determined that at least a part of data in any one window W_(z)[k−A_(z), k_(j)+B_(z)] does not meet the preset condition C_(z), N bytes are skipped from the potential dividing point k along a direction of searching for a data stream dividing point, where N≦∥B_(z)∥+max_(x)(∥A_(x)∥). ∥B_(z)∥ represents an absolute value of B_(z) in W_(z)[k−A_(z), k_(j)+B_(z)], max_(x)(∥A_(x)∥) represents a maximum value among the absolute value of A_(x) in the M windows, and a principle of determining a value of N is specifically introduced in the following embodiments. When it is determined that at least a part of data in each window W_(x)[k−A_(x), k+B_(x)] of the M windows meets the preset condition C_(x), the potential dividing point k is a data stream dividing point.

Specifically, for a current potential dividing point k_(i), the following steps are performed according to the rule:

Step 2001: Determine a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for the current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M.

Step 2002: Determine whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z);

when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skip N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, and perform step 2001; and

when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), select the current potential dividing point k_(i) as a data stream dividing point.

Further, the rule further includes that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f)|, and C_(e)=C_(f). Further, the rule further includes that A_(e) and A_(f) are positive integers. Still further, the rule further includes A_(e)−1=A_(f) and B_(e)+1=B_(f). |A_(e)+B_(e)| represents a size of the window W_(ie), and |A_(f)+B_(f)| represents a size of the window W_(if).

Further, the determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically includes: determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z). Still further, the determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) is specifically: determining, by using a hash function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

When the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point. According to the rule, a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(c), k_(i)+B_(c)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], where the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.

In this embodiment of the present invention, a data stream dividing point is searched for by determining whether at least a part of data in a window of M windows meets a preset condition, and when the at least a part of data in the window does not meet the preset condition, a length of N*U is skipped, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a next potential dividing point, thereby improving efficiency of searching for a data stream dividing point.

In a process of eliminating duplicate data, to ensure an even size of a data chunk, a size of an average data chunk (also referred to as an average chunk) is considered. That is, while limits on a size of a minimum data chunk and a size of a maximum data chunk are met, the size of the average data chunks is determined to ensure an even size of an obtained data chunk. A probability (represented as P(n)) of finding a data stream dividing point depends on two factors, that is, the quantity M of the windows W_(x)[k−A_(x), k+B_(x)] and a probability that at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets a preset condition, where the former affects a length for skipping, the latter affects a probability of skipping, and the two together affect the size of the average chunk. Generally, when the size of the average chunk is fixed, as the quantity of W_(x)[k−A_(x), k+B_(x)] increases, the probability that at least a part of data in a single window W_(x)[k−A_(x), k+B_(x)] meets a preset condition also increases. For example, a rule is preset on the deduplication server 103, and the rule is: for a potential dividing point k, determining 11 windows W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 11 separately, and a probability that at least a part of data in any window W_(x)[k−A_(x), k+B_(x)] of the 11 windows meets a preset condition is ½. Another group of rules preset on the deduplication server 103 is: determining 24 windows W_(x)[k−A_(x), k+B_(x)] for the potential dividing point k, where x indicates consecutive natural numbers from 1 to 24 separately, and a probability that at least a part of data in any window W_(x)[k−A_(x), k+B_(x)] of the 24 windows meets the preset condition C_(x) is ¾. For the setting of a probability that at least a part of data in a specific window W_(x)[k−A_(x), k+B_(x)] meets a preset condition, reference may be made to the description of the part of determining whether at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets a preset condition. P(n) depends on the two factors, that is, the quantity M of windows W_(x)[k−A_(x), k+B_(x)] and the probability that at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets a preset condition, and P(n) represents: a probability that no data stream dividing point is found after n minimum units for searching for a data stream dividing point in a search from a start position or a previous data stream dividing point of a data stream. A process of calculating P(n) that depends on the two factors is actually an n-step Fibonacci sequence, which is described below in detail. After P(n) is obtained, 1−P(n) is a distribution function of a data stream dividing point, and (1−P(n))−(1−P(n−1))=P(n−1)−P(n) is a probability that a data stream dividing point is found at a distance of n minimum units for searching for a data stream dividing point, that is, a density function of a data stream dividing point. Integration

$\sum\limits_{n = {4^{*}1024}}^{12^{*}1024}{n \times \left( {{P\left( {n - 1} \right)} - {P(n)}} \right)}$

may be performed according to the density function of a data stream dividing point, so as to obtain an expected length of a data stream dividing point, that is, the size of the average chunk, where 4*1024 (bytes) represents a length of the minimum data chunk, and 12*1024 (bytes) represents a length of the maximum data chunk.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 21, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 11, and A_(x) and B_(x) are integers. A₁=169, B₁=0; A₂=170, B₂=−1; A₃=171, B₃=−2; A₄=172, B₄=−3; A₅=173, B₅=−4; A₆=174, B₆=−5; A₇=175, B₇=−6; A₈=176, B₈=−7; A₉=177, B₉=−8; A₁₀=178, B₁₀=−9; A₁₁=179, B₁₁=−10. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. Therefore, the 11 windows are W₁[k−169, k], W₂[k−170, k−1], W₃[k−171, k−2], W₄[k−172, k−3], W₅[k−173, k−4], W₆[k−174, k−5], W₇[k−175, k−6], W₈[k−176, k−7], W₉[k−177, k−8], W₁₀[k−178, k−9], and W₁₁[k−179, k−10]. k_(a) is a data stream dividing point, and a direction of searching for a data stream dividing point shown in FIG. 21 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i). According to the rule preset on the deduplication server 103, a window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] is determined for the potential dividing point k_(i), and in this embodiment, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 21, 11 windows are determined for the potential dividing point k_(i), and are W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k₁−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−178, k_(i)−9], and W_(i11)[k_(i)−179, k_(i)−10] separately. It is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁, it is determined whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−174, k_(i)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−175, k_(i)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−176, k_(i)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−177, k_(i)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−178, k_(i)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−179, k_(i)−10] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, W_(i5)[k_(i)−173, k_(i)−4] shown in FIG. 22, N bytes are skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₅∥+max_(x)(∥A_(x)∥). In an implementation manner shown in FIG. 22, the N bytes that are skipped are not greater than 183 bytes, and in this embodiment, N=7, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point here is represented as k_(j) here. According to the implementation manner shown in FIG. 21, a rule is preset on the deduplication server 103, where the rule is: determining a window W_(jx)[k_(j)−A_(x), k+B_(x)] for the potential dividing point k_(j), where in this embodiment, x indicates consecutive natural numbers from 1 to 11 separately. 11 windows are determined for the potential dividing point k_(j), and are W_(j1)[k_(j)−169, k_(j)], W_(j2)[k_(j)−170, k_(j)−1], W_(j3)[k_(j)−171, k_(j)−2], W_(j4)[k_(j)−172, k_(j)−3], W_(j5)[k_(j)−173, k_(j)−4], W_(j6)[k_(j)−174, k_(j)−5], W_(j7)[k_(j)−175, k_(j)−6], W_(j8)[k_(j)−176, k_(j)−7], W_(j9)[k_(j)−177, k_(j)−8], W_(j10)[k_(j)−178, k_(j)−9], and W_(j11)[k_(j)−179, k_(j)−10] separately. As shown in FIG. 22, when the 11th window W_(j11)[k_(j)−179, k_(j)−10] is determined for the potential dividing point, to ensure that a range between the potential dividing point k_(i) and the potential dividing point k_(j) completely falls within a determining range, in this implementation manner, it may be ensured that a left boundary of the window W_(j11)[k_(j)−179, k_(j)−10] coincides with a right boundary (k_(i)−4) of the window W_(i5)[k_(i)−173, k_(i)−4], or falls within a range of the window W_(i5)[k_(i)−173, k_(i)−4], where the window W_(j11)[k_(j)−179, k_(j)−10] is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of the 11 windows that are determined for the potential dividing point k_(j) according to the rule. Therefore, within such a limit, when at least a part of data in the window W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, a distance for skipping from the potential dividing point k_(i) along the direction of searching for a data stream dividing point is not greater than ∥B₅∥+max_(x)(∥A_(x)∥). It is determined whether at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W₉[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and according to the rule preset on the deduplication server 103, it is determined whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, a next potential dividing point is obtained in a manner the same as that of k_(i), and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

In the implementation manner shown in FIG. 21, according to the rule preset on the deduplication server 103, starting from determining whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁, when it is determined the at least a part of data in W_(i1)[k_(i)−169, k_(i)], the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1], the at least a part of data in W_(i3)[k_(i)−171, k_(i)−2], and the at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meet the preset conditions C₁, C₂, C₃, and C₄ respectively, and it is determined that the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 6 bytes are skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point, and a new potential dividing point is obtained at an end position of a 6th byte. For differentiation from other potential dividing points, the new potential dividing point is represented as k_(g) here. According to the rule preset on the deduplication server 103, 11 windows are determined for the potential dividing point k_(g), and are W_(g1)[k_(g)−169, k_(g)], W_(g2)[k_(g)−170, k_(g)−1], W_(g3)[k_(g)−171, k_(g)−2], W_(g4)[k_(g)−172, k_(g)−3], W_(g5)[k_(g)−173, k_(g)−4], W_(g6)[k_(g)−174, k_(g)−5], W_(g7)[k_(g)−175, k_(g)−6], W_(g8)[k_(g)−176, k_(g)−7], W_(g9)[k_(g)−177, k_(g)−8], W_(g10)[k_(g)−178, k_(g)−9], and W_(g11)[k_(g)−179, k_(g)−10] separately. It is determined whether at least a part of data in W_(g1)[k_(g)−169, k_(g)] meets the preset condition C₁, it is determined whether at least a part of data in W_(g2)[k_(g)−170, k_(g)−1] meets the preset condition C₂, it is determined whether at least a part of data in W_(g3)[k_(g)−171, k_(g)−2] meets the preset condition C₃, it is determined whether at least a part of data in W_(g4)[k_(g)−172, k_(g)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(g5)[k_(g)−173, k_(g)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(g6)[k_(g)−174, k_(g)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(g7)[k_(g)−175, k_(g)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(g8)[k_(g)−176, k_(g)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(g9)[k_(g)−177, k_(g)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(g10)[k_(g)−178, k_(g)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(g11)[k_(g)−179, k_(g)−10] meets a preset condition C₁₁. The window W_(g11)[k_(g)−179, k_(g)−10] coincides with the window W_(i5)[k_(i)−173, k_(i)−4], and C₅=C₁₁; therefore, when it is determined that the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, a potential dividing point k_(g) obtained by skipping T bytes from the potential dividing point k_(i) along the direction of searching for a data stream dividing point still does not meet a condition for serving as a data stream dividing point. Therefore, if repeated calculation exists when 6 bytes are skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point, then repeated calculation can be reduced and efficiency is higher when 7 bytes are skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point. Therefore, a speed of searching for a data stream dividing point is increased. When a probability that at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] that is determined according to the preset rule meets the preset condition C_(x) is ½, that is, a probability of executing skipping is ½, at most ∥B₁₁∥+|A₁₁=189 bytes can be skipped each time.

In this implementation manner, a preset rule is that: 11 windows W_(x)[k−A_(x), k+B_(x)] are determined for a potential dividing point k and at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets a preset condition C_(x), where a probability that at least a part of data in W_(x)[k−A_(x), k+B_(x)] meets the preset condition C_(x) is ½, where x indicates consecutive natural numbers from 1 to 11 separately, and A_(x) and B_(x) are integers. A₁=169, B₁=0; A₂=170, B₂=−1; A₃=171, B₃=−2; A₄=172, B₄=−3; A₅=173, B₅=−4; A₆=174, B₆=−5; A₇=175, B₇=−6; A₈=176, B₈=−7; A₉=177, B₉=−8; A₁₀=178, B₁₀=−9; A₁₁=179, B₁₁=−10. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. That is, 11 windows are selected for the potential dividing point k, and the 11 windows are consecutive; P(n) can be calculated by using the two factors, that is, the quantity of windows and the probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] meets the preset condition C_(x). A manner of selecting the 11 windows and the determining that at least a part of data in each window of the 11 windows meets the preset condition C_(x) follow the rule preset on the deduplication server 103, and therefore, whether the potential dividing point k is a data stream dividing point depends on whether it exists that at least a part of data in each window of 11 consecutive windows meets the preset condition C_(x). A gap between two bytes is referred to as one point. P(n) represents a probability that 11 consecutive windows meeting a condition do not exist among n consecutive windows, that is, a probability that no data stream dividing point exists. After a minimum chunk size of 4 KB is skipped from a file header/previous dividing point, a 4086th point is found by going back by 10 bytes in a direction opposite to the direction of searching for a data stream dividing point, and no data stream dividing point exists at the point; therefore, P(4086)=1, and P(4087)=1, . . . , P(4095)=1, and so on. At an 4096th point, that is, a point which is used to obtain the minimum chunk, with a probability of (½)̂11, at least a part of data in each window of the 11 windows meets the preset condition C_(x). Hence, with a probability of (½)̂11, a data stream dividing point exists; with a probability of 1−(½)̂11, no data stream dividing point exists; therefore P(4096)=1−(½)̂11.

As shown in FIG. 35, in an nth window, there may be 12 cases of obtaining P(n) by means of recursion.

Case 1: With a probability of ½, at least a part of data in the nth window does not meet a preset condition; in this case, with a probability of P(n−1), 11 consecutive windows do not exist among (n−1) windows before the nth window, where at least a part of data in each window of the 11 consecutive windows meets a preset condition. Therefore, P(n) includes ½*P(n−1). A case in which the at least a part of data in the nth window does not meet the preset condition, and 11 consecutive windows exist among the (n−1) windows before the nth window, where at least a part of data in each window of the 11 consecutive windows meets the preset condition, is not related to P(n).

Case 2: With a probability of ½, at least a part of data in the nth window meets a preset condition, and with the probability of ½, at least a part of data in an (n−1)th window does not meet a preset condition; in this case, with a probability of P(n−2), 11 consecutive windows do not exist among (n−2) windows before the (n−1)th window, where at least a part of data in each window of the 11 consecutive windows meets a preset condition. Therefore, P(n) includes ½*½*P(n−2). A case in which the at least a part of data in the nth window meets the preset condition, the at least a part of data in the (n−1)th point window does not meet the preset condition, and 11 consecutive windows exist among the (n−2) windows before the (n−1)th window, where at least a part of data in each window of the 11 consecutive windows meets the preset condition, is not related to P(n).

According to the foregoing description, case 11: With a probability of (½)̂10, at least a part of data in nth to (n−9)th windows meets a preset condition, and with a probability of ½, at least a part of data in an (n−10)th window does not meet a preset condition; in this case, with a probability of P(n−11), 11 consecutive windows do not exist among (n−11) windows before the (n−10)th window, where at least a part of data in each window of the 11 consecutive windows meets a preset condition. Therefore, P(n) includes (½)̂10*½*P(n−11). A case in which the at least a part of data in the nth to (n−9)th windows meets the preset condition, the at least a part of data in the (n−10)th window does not meet the preset condition, and 11 consecutive windows exist among the (n−11) windows before the (n−10)th window, where at least a part of data in each window of the 11 consecutive windows meets the preset condition, is not related to P(n).

Case 12: With a probability of (½)̂11, at least a part of data in nth to (n−10) windows meets a preset condition is, and this case is not related to P(n).

Therefore, P(n)=½*P(n−1)+(½)̂2*P(n−2)+ . . . +(½)̂11*P(n−11). Another preset rule is: for a potential dividing point k, 24 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)] are determined, where x indicates consecutive natural numbers from 1 to 11, A₁=169, B₁=0; A₂=170, B₂=−1; A₃=171, B₃=−2; A₄=172, B₄=−3; A₅=173, B₅=−4; A₆=174, B₆=−5; A₇=175, B₇=−6; A₈=176, B₈=−7; A₉=177, B₉=−8; A₁₀=178, B₁₀=−9; A₁₁=179, B₁₁=−10, . . . , and A₂₄=192, B_(j4)=−23. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉= . . . =C₂₄. A probability that at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets the preset condition C_(x) is ¾, and P(n) can be calculated by using the two factors, that is, the quantity of windows and the probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] meets the preset condition C_(x).

Therefore, whether the potential dividing point k is a data stream dividing point depends on whether it exists that at least a part of data in each window of the 24 consecutive windows meets the preset condition C_(x), and calculation can be performed by using the following formulas:

P(1)=1,P(2), . . . ,P(23)=1,P(24)=1−(¾)̂24, and

P(n)=¼*P(n−1)+¼*(¾)*P(n−2)+ . . . +¼*(¾)̂23*P(n−24).

After calculation, P(5*1024)=0.78, P(11*1024)=0.17, and P(12*1024)=0.13. That is, no data stream dividing point is found with a probability of 13% after a search proceeds to a point at a distance of 12 KB from a start position/previous data stream dividing point of a data stream, and forced division is performed. A density function of a data stream dividing point is obtained by using this probability, and after integration, it is obtained that on average, a data stream dividing point is found after a search proceeds to a point at a distance about 7.6 KB from the start position/previous data stream dividing point of the data stream, that is, an average chunk length is about 7.6 KB. Different from that at least a part of data in 11 consecutive windows meets a preset condition with a probability of ½, a conventional CDC algorithm can achieve an effect of an average chunk length being 7.6 KB only when one window meets a condition with a probability of ½̂12.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 23, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 11, and A_(x) and B_(x) are integers. A probability that at least a part of data in the window W_(x)[k−A_(x), k+B_(x)] meets the preset condition C_(x) is ½. A₁=171, B₁=−2; A₂=172, B₂=−3; A₃=173, B₃=−4; A₄=174, B₄=−5; A₅=175, B₅=−6; A₆=176, B₆=−7; A₇=177, B₇=−8; A₈=178, B₈=−9; A₉=179, B₉=−10; A₁₀=170, B₁₀=−1; A₁₁=169, B₁₁=0. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. k_(a) is a data stream dividing point, and a direction of searching for a data stream dividing point shown in FIG. 23 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i). According to the rule preset on the deduplication server 103, for the potential dividing point k_(i), W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] and the preset condition C_(x) corresponding to the window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] are determined, where x indicates consecutive natural numbers from 1 to 11. Determined 11 windows are W_(i1)[k_(i)−171, k_(i)−2], W_(i2)[k_(i)−172, k_(i)−3], W_(i3)[k_(i)−173, k_(i)−4], W_(i4)[k_(i)−174, k_(i)−5], W_(i5)[k_(i)−175, k_(i)−6], W_(i6)[k_(i)−176, k_(i)−7], W_(i7)[k_(i)−177, k_(i)−8], W_(i8)[k_(i)−178, k_(i)−9], W_(i9)[k_(i)−179, k_(i)−10], W_(i10)[k_(i)−170, k_(i)−1], and W_(i11)[k_(i)−169, k_(i)] separately. It is determined whether at least a part of data in W_(i1)[k_(i)−171, k_(i)−2] meets the preset condition C₁, it is determined whether at least a part of data in W_(i2) [k_(i)−172, k_(i)−3] meets the preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−173, k_(i)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−174, k_(i)−5] meets the preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−175, k_(i)−6] meets the preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−176, k_(i)−7] meets the preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−177, k_(i)−8] meets the preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−178, k_(i)−9] meets the preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−179, k_(i)−10] meets the preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−170, k_(i)−1] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−169, k_(i)] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7), meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, as shown in FIG. 24, that the at least a part of data in W_(i3)[p_(i3)−169, p_(i3)] does not meet the preset condition C₃, 11 bytes are skipped from a point p_(i3) along a direction of searching for a data stream dividing point is used as an example for description. As shown in FIG. 24, when it is determined that W₃ does not meet the preset condition C₃, from k_(i) that serves as a start point, N bytes are skipped along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₃∥+max_(x)(∥A_(x)∥). In this embodiment, N=7, and a next potential dividing point is obtained at an end position of a 7th byte. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According to the rule preset on the deduplication server 103, for the potential dividing point k_(j), 11 windows W_(jx)[k_(j)−A_(x), k_(j)+B_(x)] are determined, and are W_(j1)[k_(j)−171, k_(j)−2], W_(j2)[k_(j)−172, k_(j)−3], W_(j3)[k_(j)−173, k_(j)−4], W_(j4)[k_(j)−174, k_(j)−5], W_(j5)[k_(j)−175, k_(j)−6], W_(j6)[k_(j)−176, k_(j)−7], W_(j7) [k_(j)−177, k_(j)−8], W_(j8)[k_(j)−178, k_(j)−9], W_(j9)[k_(j)−179, k_(j)−10], W_(j10)[k_(j)−170, k_(j)−1], and W_(j11)[k_(j)−169, k_(j)] separately. It is determined whether at least a part of data in W_(j1)[k_(j)−171, k_(j)−2] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[k_(j)−172, k_(j)−3] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[k_(j)−173, k_(j)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[k_(j)−174, k_(j)−5] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−175, k_(j)−6] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6) [k_(j)−176, k_(j)−7] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−177, k_(j)−8] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−178, k_(j)−9] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−179, k_(j)−10] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−170, k_(j)−1] meets the preset condition C₁₀ and it is determined whether at least a part of data in W_(j11)[k_(j)−169, k_(j)] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and according to the rule preset on the deduplication server 103, it is determined whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, a next potential dividing point is obtained in a manner the same as that of k_(i), and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point. Certainly, implementation of the method is restricted by a length of the maximum data chunk and a size of a file forming the data stream, which is not described herein again.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 25, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 11. A₁=166, B₁=3; A₂=167, B₂=2; A₃=168, B₃=1; A₄=169, B₄=0; A₅=170, B₅=−1; A₆=171, B₆=−2; A₇=172, B₇=−3; A₈=173, B₈=−4; A₉=174, B₉=−5; A₁₀=175, B₁₀=−6; A₁₁=176, B₁₁=−7. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁, and 11 windows are W₁[k−166, k+3], W₂[k−167, k+2], W₃[k−168, k+1], W₄[k−169, k], W₅[k−170, k−1], W_(j6)[k−171, k−2], W₇[k−172, k−3], W₈[k−173, k−4], W₉[k−174, k−5], W₁₀[k−175, k−6], and W₁₁ [k−176, k−7] separately. k_(a) is a data stream dividing point, and a direction of searching for a data stream dividing point shown in FIG. 25 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, for the potential dividing point k_(i), 11 windows W_(ix)[k−A_(x), k+B_(x)] and the preset condition C_(x) corresponding to the window W_(ix)[k−A_(x), k+B_(x)] are determined, where x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 25, for the potential dividing point k_(i), the 11 windows that are determined are W_(i1)[k_(i)−166, k_(i)+3], W_(i2)[k_(i)−167, k_(i)+2], W_(i3)[k_(i)−168, k+1], W_(i4)[k_(i)−169, k_(i)], W_(i5)[k_(i)−170, k_(i)−1], W_(i6)[k_(i)−171, k_(i)−2], W_(i7)[k_(i)−172, k_(i)−3], W_(i8)[k_(i)−173, k_(i)−4], W_(i9)[k_(i)−174, k_(i)−5], W_(i10)[k_(i)−175, k_(i)−6], and W_(i11)[k_(i)−176, k_(i)−7] separately. It is determined whether at least a part of data in W_(i1)[k_(i)−166, k_(i)+3] meets the preset condition C₁, it is determined whether at least a part of data in W_(i2)[k_(i)−167, k_(i)+2] meets the preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−168, k_(i)+1] meets the preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−169, k_(i)] meets the preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−170, k_(i)−1] meets the preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−171, k_(i)−2] meets the preset condition C₆, it is determined whether at least a part of data in W_(i7) W_(i7)[k_(i)−172, k_(i)−3] meets the preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−173, k_(i)−4] meets the preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−174, k_(i)−5] meets the preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−175, k_(i)−6] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(i10)[k_(i)−176, k_(i)−7] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5), meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, W_(i7)[k_(i)−172, k_(i)−3] shown in FIG. 26, N bytes are skipped from the potential dividing point k_(i) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₇∥+max_(x)(∥A_(x)∥). In an implementation manner shown in FIG. 26, the N bytes which are skipped are not greater than 185 bytes, and in this embodiment, N=5, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According to the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 25, for the potential dividing point k_(j), 11 windows are determined, and are W_(j1)[k_(j)−166, k_(j)+3], W_(j2)[k_(j)−167, k_(j)+2], W_(j3)[k_(j)−168, k_(j)+1], W_(j4)[k_(j)−169, k_(j)], W_(j5)[k_(j)−170, k_(j)−1], W_(j6)[k_(j)−171, k_(j)−2], W_(j7)[k_(j)−172, k_(j)−3], W_(j8)[k_(j)−173, k_(j)−4], W_(j9)[k_(j)−174, k_(j)−5], W_(j10)[k_(j)−175, k_(j)−6], and W_(j11)[k_(j)−176, k_(j)−7] separately. It is determined whether at least a part of data in W_(j1)[k_(j)−166, k+3] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[k_(j)−167, k_(j)+2] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[k_(j)−168, k_(j)+1] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[k_(j)−169, k_(j)] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−170, k_(j)−1] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−171, k_(j)−2] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−172, k_(j)−3] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−173, k_(j)−4] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−174, k_(j)−5] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−175, k_(j)−6] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−176, k_(j)−7] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and according to the rule preset on the deduplication server 103, it is determined whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, a next potential dividing point is obtained in a manner the same as that of k_(i), and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

On the basis of the search for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 27, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 11. A₁=169, B₁=0; A₂=170, B₂=−1; A₃=171, B₃=−2; A₄=172, B₄=−3; A₅=173, B₅=−4; A₆=174, B₆=−5; A₇=175, B₇=−6; A₈=176, B₈=−7; A₉=177, B₉=−8; A₁₀=168, B₁₀=1; A₁₁=179, B₁₁=3. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀C₁₁, and 11 windows are W₁[k−169, k], W₂[k−170, k−1], W₃[k−171, k−2], W₄[k−172, k−3], W₅[k−173, k−4], W₆[k−174, k−5], W₇[k−175, k−6], W₈[k−176, k−7], W₉[k−177, k−8], W₁₀[k−168, k+1], and W₁₁ [k−179, k+3] separately. k_(a) is a data stream dividing point, and a direction of searching for a data stream dividing point shown in FIG. 27 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, for the potential dividing point k_(i), a window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] is determined, where x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 27, for the potential dividing point k_(i), 11 windows that are determined are W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−168, k_(i)+1], and W_(i11)[k_(i)−179, k_(i)+3] separately. It is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)+1] meets the preset condition C₁, it is determined whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−174, k_(i)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−175, k_(i)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−176, k_(i)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−177, k_(i)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−168, k_(i)+1] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−179, k_(i)+3] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When it is determined that the at least a part of data in the window W_(i11) does not meet the preset condition C₁₁, 1 byte is skipped from the potential dividing point k_(j) along the direction of searching for a data stream dividing point, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(i) here. When the at least a part of data in any window the 10 windows W_(i1), W_(i2), W_(i3), W_(i4), W_(i5), W_(i6), W_(i7), W_(i8), W_(i9), and W_(i10) does not meet the corresponding preset condition, for example, W_(i4) [k_(i)−172, k_(i)−3] shown in FIG. 28, N bytes are skipped from the point k_(i) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₄∥+max_(x)(∥A_(x)∥). In an implementation manner shown in FIG. 28, the N bytes that are skipped are not greater than 182 bytes, and in this embodiment, N=6, so as to obtain a new potential dividing point. For differentiation from the potential dividing point k_(i), the new potential dividing point is represented as k_(j) here. According the rule preset on the deduplication server 103 in the implementation manner shown in FIG. 27, windows determined for the potential dividing point k_(j) are W_(j1)[k_(j)−169, k_(j)], W_(j2)[k_(j)−170, k_(j)−1], W_(j3)[k_(j)−171, k_(j)−2], W_(j4)[k_(j)−172, k_(j)−3], W_(j5)[k_(j)−173, k_(j)−4], W_(j6)[k_(j)−174, k_(j)−5], W_(j7)[k_(j)−175, k_(j)−6], W_(j8)[k_(j)−176, k_(j)−7], W_(j9)[k_(j)−177, k_(j)−8], W_(j10)[k_(j)−168, k_(j)+1], and W_(j11) [k_(j)−179, k_(j)+3] separately. It is determined whether at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, it is determined whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−168, k_(j)+1] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)+3] meets the preset condition C₁₁. Certainly, in this embodiment of the present invention, the rule is also followed when it is determined whether the potential dividing point k_(a) is a data stream dividing point, specific implementation is not described again, and reference may be made to the description of determining the potential dividing point k_(i). When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(j9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point, and data between k_(j) and k_(a) forms 1 data chunk. Meanwhile, a minimum chunk size of 4 KB is skipped in a manner the same as that of k_(a) to obtain a next potential dividing point, and according to the rule preset on the deduplication server 103, it is determined whether the next potential dividing point is a data stream dividing point. When it is determined that the potential dividing point k_(j) is not a data stream dividing point, a next potential dividing point is obtained in a manner the same as that of k_(i), and it is determined, according to the rule preset on the deduplication server 103 and the foregoing method, whether the next potential dividing point is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

On the basis of the searching for a data stream dividing point shown in FIG. 3, in an implementation manner shown in FIG. 29, a rule is preset on a deduplication server 103, where the rule is: for a potential dividing point k, determining 11 windows W_(x)[p_(x)−A_(x), p_(x)+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[p_(x)−, p_(x)+B_(x)], where x indicates consecutive natural numbers from 1 to 11 separately, where a probability that at least a part of data in the window W_(x)[p_(x)−A_(x), p_(x)+B_(x)] meets a preset condition is ½. A₁=169, B₁=0; A₂=171, B₂=−2; A₃=173, B₃=−4; A₄=175, B₄=−6; A₅=177, B₅=−8; A₆=179, B₆=−10; A₇=181, B₇=−12; A₈=183, B₈=−14; A₉=185, B₉=−16; A₁₀=187, B₁₀=−18; A₁₁=189, B₁₁=−20. C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁, and the 11 windows are W₁[k−169, k], W₂[k−171, k−2], W₃[k−173, k−4], W₄[k−175, k−6], W₅[k−177, k−8], W₆[k−179, k−10], W₇[k−181, k−12], W₈ [k−183, k−14], W₉[k−185, k−16], W₁₀[k−187, k−18], and W₁₁[k−189, k−20] separately. k_(a) is a data stream dividing point, and a direction of searching for a data stream dividing point shown in FIG. 29 is from left to right. After a minimum data chunk of 4 KB is skipped from the data stream dividing point k_(a), an end position of the minimum data chunk of 4 KB serves as a next potential dividing point k_(i), and a point p_(ix) is determined for the potential dividing point k_(i). In this embodiment, according to the rule preset on the deduplication server 103, x indicates consecutive natural numbers from 1 to 11 separately. In the implementation manner shown in FIG. 29, according to the preset rule, 11 windows determined for the potential dividing point k_(i) are W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−171, k_(i)−2], W_(i3)[k_(i)−173, k_(i)−4], W_(i4)[k_(i)−175, k_(i)−6], W_(i5)[k_(i)−177, k_(i)−8], W_(i6)[k_(i)−179, k_(i)−10], W_(i7)[k_(i)−181, k_(i)−12], W_(i8)[k_(i)−183, k_(i)−14], W_(i9)[k_(i)−185, k_(i)−16], W_(i10)[k_(i)−187, k_(i)−18], and W_(i11)[k_(i)−189, k_(i)−20] separately. It is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁, it is determined whether at least a part of data in W_(i2)[k_(i)−171, k_(i)−2] meets the preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−173, k_(i)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−175, k_(i)−6] meets the preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−177, k_(i)−8] meets the preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−179, k_(i)−10] meets the preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−181, k_(i)−12] meets the preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−183, k_(i)−14] meets the preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−185, k_(i)−16] meets the preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−187, k_(i)−18] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−189, k_(i)−20] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(i1) meets the preset condition C₁, the at least a part of data in the window W_(i2) meets the preset condition C₂, the at least a part of data in the window W_(i3) meets the preset condition C₃, the at least a part of data in the window W_(i4) meets the preset condition C₄, the at least a part of data in the window W_(i5) meets the preset condition C₅, the at least a part of data in the window W_(i6) meets the preset condition C₆, the at least a part of data in the window W_(i7) meets the preset condition C₇, the at least a part of data in the window W_(i8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(i10) meets the preset condition C₁₀, and the at least a part of data in the window W_(i11) meets the preset condition C₁₁, the current potential dividing point k_(i) is a data stream dividing point. When the at least a part of data in any window of the 11 windows does not meet the corresponding preset condition, for example, as shown in FIG. 30, the at least a part of data in W_(i4)[k_(i)−175, k_(i)−6] does not meet the preset condition C₄, a next potential dividing point is selected. For differentiation from the potential dividing point k_(i), the next potential dividing point is represented as k_(j) here, where k_(j) is located on the right of k_(i), and a distance between k_(j) and k_(i) is 1 byte. As shown in FIG. 30, according to the rule preset on the deduplication server 103, for the potential dividing point k_(j), 11 windows are determined, and are W_(j1)[k_(j)−169, k_(j)], W_(j2)[k_(j)−171, k_(j)−2], W_(j3)[k_(j)−173, k_(j)−4], W_(j4)[k_(j)−175, k_(j)−6], W_(j5)[k_(j)−177, k_(j)−8], W_(j6)[k_(i)−179, k_(j)−10], W_(j7)[k_(j)−181, k_(j)−12], W_(j8)[k_(j)−183, k_(j)−14], W_(j9)[k_(j)−185, k_(j)−16], W_(j10) [k_(j)−187, k_(j)−18], and W_(j11)[k_(j)−189, k_(j)−20] separately, where C₁=C₂=C₃=C₄=C₅=C₆=C₇=C₈=C₉=C₁₀=C₁₁. It is determined whether at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁, it is determined whether at least a part of data in W_(j2)[k_(j)−171, k_(j)−2] meets the preset condition C₂, it is determined whether at least a part of data in W₃[k_(j)−173, k_(j)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(j4)[k_(j)−175, k_(j)−6] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−177, k_(j)−8] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−179, k_(j)−10] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−181, k_(j)−12] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−183, k_(j)−14] meets the preset condition C₈, it is determined whether at least a part of data in W₉[k_(j)−185, k_(j)−16] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−187, k_(j)−18] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−189, k_(j)−20] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(j1) meets the preset condition C₁, the at least a part of data in the window W_(j2) meets the preset condition C₂, the at least a part of data in the window W_(j3) meets the preset condition C₃, the at least a part of data in the window W_(j4) meets the preset condition C₄, the at least a part of data in the window W_(j5) meets the preset condition C₅, the at least a part of data in the window W_(j6) meets the preset condition C₆, the at least a part of data in the window W_(j7) meets the preset condition C₇, the at least a part of data in the window W_(j8) meets the preset condition C₈, the at least a part of data in the window W_(i9) meets the preset condition C₉, the at least a part of data in the window W_(j10) meets the preset condition C₁₀, and the at least a part of data in the window W_(j11) meets the preset condition C₁₁, the current potential dividing point k_(j) is a data stream dividing point. When it is determined that the at least a part of data in any window of the windows W_(j1), W_(j2), W_(j3), W_(j4), W_(j5), W_(j6), W_(j7), W_(j8), W_(j9), W_(j10), and W_(j11) does not meet a preset condition, for example, as shown in FIG. 31, when the at least a part of data in W_(j3)[k_(j)−173, k_(j)−4] does not meet the preset condition C₃, k_(j) is located on the right of k_(i) and N bytes are skipped from k_(i) along the direction of searching for a data stream dividing point, where the N bytes are not greater than ∥B₄∥+max_(x)(∥A_(x)∥). In the implementation manner shown in FIG. 28, the N bytes are not greater than 195 bytes, and in this embodiment, N=15, so as to obtain a next potential dividing point. For differentiation from the potential dividing points k_(i) and k_(j), the next potential dividing point is represented as k_(i). According to the rule preset on the deduplication server 103 in the implementation manner in FIG. 29, for the potential dividing point k_(l), 11 windows are determined, and are W_(l1)[k_(l)−169, k_(l)], W_(l2)[k_(l)−171, k_(l)−2], W₃[k_(l)−173, k_(l)−4], W_(l4)[k_(l)−175, k_(l)−6], W₁₅[k_(l)−177, k_(l)−8], W_(l6)[k_(l)−179, k_(l)−10], W_(l7)[k_(l)−181, k_(l)−12], W_(l8)[k_(l)−183, k_(l)−14], W_(l9) [k_(l)−185, k_(l)−16], W_(l10)[k_(l)−187, k_(l)−18], and W_(l11)[k_(l)−189, k_(l)−20] separately. It is determined whether at least a part of data in W_(l1)[k_(l)−169, k_(l)] meets the preset condition C₁, it is determined whether at least a part of data in W_(l2)[k_(l)−171, k_(l)−2] meets the preset condition C₂, it is determined whether at least a part of data in W_(l3)[k_(l)−173, k_(l)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(l4)[k_(l)−175, k_(l)−6] meets the preset condition C₄, it is determined whether at least a part of data in W_(l5), [k_(l)−177, k_(l)−8] meets the preset condition C₅, it is determined whether at least a part of data in W_(l6), [k_(l)−179, k_(l)−10] meets the preset condition C₆, it is determined whether at least a part of data in W_(l7)[k_(l)−181, k_(l)−12] meets the preset condition C₇, it is determined whether at least a part of data in W_(l8)[k_(l)−183, k_(l)−14] meets the preset condition C₈, it is determined whether at least a part of data in W₉, [k_(l)−185, k_(l)−16] meets the preset condition C₉, it is determined whether at least a part of data in W₁₀[k_(l)−187, k_(l)−18]meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(l11)[k_(l)−189, k_(l)−20] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(l1) meets the preset condition C₁, the at least a part of data in the window W_(l2) meets the preset condition C₂, the at least a part of data in the window W_(l3) meets the preset condition C₃, the at least a part of data in the window W_(l4) meets the preset condition C₄, the at least a part of data in the window W_(l5) meets the preset condition C₅, the at least a part of data in the window W_(l6) meets the preset condition C₆, the at least a part of data in the window W_(l7) meets the preset condition C₇, the at least a part of data in the window W_(l8) meets the preset condition C₈, the at least a part of data in the window W_(l9) meets the preset condition C₉, the at least a part of data in the window W_(l10) meets the preset condition C₁₀, and the at least a part of data in the window W_(l11) meets the preset condition C₁₁, the current potential dividing point k_(l) is a data stream dividing point. When the at least a part of data in any window of the windows W_(l1), W_(l2), W_(l3)W_(l4), W_(l5), W_(l6), W_(l7), W_(l8), W_(l9), W_(l10), and W_(l11) does not meet a preset condition, a next potential dividing point is selected. For differentiation from the potential dividing points k_(i), k_(j), and k_(l), the next potential dividing point is represented as k_(m), where k_(m) is located on the right of k_(l), and a distance between k_(m) and k_(l) is 1 byte. According to the rule preset on the deduplication server 103 in the embodiment shown in FIG. 29, 11 windows determined for the potential dividing point k_(m) are W_(m1)[k_(m)−169, k_(m)], W_(m2)[k_(m)−171, k_(m)−2], W_(m3)[k_(m)−173, k_(m)−4], W_(m4)[k_(m)−175, k_(m)−6], W_(m5)[k_(m)−177, k_(m)−8], W_(m6)[k_(m)−179, k_(m)−10], W_(m7)[k_(m)−181, k_(m)−12], W_(m8)[k_(m)−183, k_(m)−14], W_(m9)[k_(m)−185, k_(m)−16], W_(m10)[k_(m)−187, k_(m)−18], and W_(m11)[k_(m)−189, k_(m)−20] separately. It is determined whether at least a part of data in W_(m1)[k_(m)−169, k_(m)] meets the preset condition C₁, it is determined whether at least a part of data in W_(m2)[k_(m)−171, k_(m)−2] meets the preset condition C₂, it is determined whether at least a part of data in W_(m3)[k_(m)−173, k_(m)−4] meets the preset condition C₃, it is determined whether at least a part of data in W_(m4)[k_(m)−175, k_(m)−6] meets the preset condition C₄, it is determined whether at least a part of data in W_(m5)[k_(m)−177, k_(m)−8] meets the preset condition C₅, it is determined whether at least a part of data in W_(m6)[k_(m)−179, k_(m)−10] meets the preset condition C₆, it is determined whether at least a part of data in W_(m7)[k_(m)−181, k_(m)−12] meets the preset condition C₇, it is determined whether at least a part of data in W_(m8)[k_(m)−183, k_(m)−14] meets the preset condition C₈, it is determined whether at least a part of data in W_(m9)[k_(m)−185, k_(m)−16] meets the preset condition C₉, it is determined whether at least a part of data in W_(m10)[k_(m)−187, k_(m)−18] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(m11)[k_(m)−189, k_(m)−20] meets the preset condition C₁₁. When it is determined that the at least a part of data in the window W_(m1) meets the preset condition C₁, the at least a part of data in the window W_(m2) meets the preset condition C₂, the at least a part of data in the window W_(m3) meets the preset condition C₃, the at least a part of data in the window W_(m4) meets the preset condition C₄, the at least a part of data in the window W_(m5) meets the preset condition C₅, the at least a part of data in the window W_(m6) meets the preset condition C₆, the at least a part of data in the window W_(m7) meets the preset condition C₇, the at least a part of data in the window W_(m8) meets the preset condition C₈, the at least a part of data in the window W_(m9) meets the preset condition C₉, the at least a part of data in the window W_(m10) meets the preset condition C₁₀, and the at least a part of data in the window W_(m11) meets the preset condition C₁₁, the current potential dividing point k_(m) is a data stream dividing point. When the at least a part of data in any window does not meet a preset condition, skipping is executed according to the solution described above to obtain a next potential dividing point, and it is determined whether the next potential dividing point is a data stream dividing point.

An embodiment of the present invention provides a method for determining whether at least a part of data in a window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z). In this embodiment, it is determined, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z), and the implementation manner shown in FIG. 21 is used as an example. According to a rule preset on a deduplication server 103, a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition C₁. As shown in FIG. 32, W_(i1) represents the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{255,1} & a_{255,2} & \ldots & a_{255,8} \end{pmatrix},$

where when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, where a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), and a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{a\; 255},1} & V_{{a\; 255},2} & \ldots & V_{{a\; 255},8} \end{pmatrix},$

A large quantity of random numbers is selected to form a matrix. Once being formed, the matrix formed by the random numbers remains unchanged. For example, 255*8 random numbers are selected from random numbers that follow specific distribution (normal distribution is used as an example here) to form a matrix R:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

where random numbers of an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8). S_(a1), S_(a2), . . . , and S_(a255) are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(a1), S_(a2), . . . , and S_(a255) is counted. Because the matrix R follows normal distribution, S_(am) still follows normal distribution as the matrix R does. According to a probability theory, a probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(a1), S_(a2), . . . , and S_(a255) is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(a255) is an even number; a probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. When K is an odd number, it indicates that the at least a part of data in W₁[k_(i)−169, k_(i)] does not meet the preset condition C₁. C₁ here refers to that the quantity K, which is obtained according to the foregoing manner, of values greater than 0 among S_(a1), S_(a2), . . . , and S_(a255) is an even number. In the implementation manner shown in FIG. 21, for W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−178, k_(i)−9], and W_(i11) [k_(i)−179, k_(i)−10], the windows are the same in size, that is, all the windows have a size of 169 bytes, and meanwhile, manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[k_(j)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 32, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as b_(m,1), . . . , and b_(m,8), representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} b_{1,1} & b_{1,2} & \ldots & b_{1,8} \\ b_{2,1} & b_{2,2} & \ldots & b_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ b_{255,1} & b_{255,2} & \ldots & b_{255,8} \end{pmatrix},$

where when b_(m,n)=1, V_(bm,n)=1, and when b_(m,n), =0, V_(bm,n)=−1, where b_(m,n) represents any one of b_(m,1), . . . , and b_(m,8), and a matrix V_(b) is obtained according to a conversion relationship between b_(m,n) and V_(bm,n) from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{b\; 1},1} & V_{{b\; 1},2} & \ldots & V_{{b\; 1},8} \\ V_{{b\; 2},1} & V_{{b\; 2},2} & \ldots & V_{{b\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{b\; 255},1} & V_{{b\; 255},2} & \ldots & V_{{b\; 255},8} \end{pmatrix}.$

A manner of determining whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition is the same as a manner of determining whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition; therefore the matrix R is used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

and random numbers of an mth row of the matrix V_(b) and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(bm)=V_(bm,1)*h_(m,1)+V_(bm,2)*h_(m,2)+ . . . +V_(bm,8)*h_(m,8). S_(b1), S_(b2), . . . , and S_(b255) are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(b1), S_(b2), . . . , and S_(b255) is counted. Because the matrix R follows normal distribution, S_(bm) still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(b1), S_(b2), . . . , and S_(b255) is greater than 0 is ½, and therefore, K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(b1), S_(b2), . . . , and S_(b255) is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂. When K is an odd number, it indicates that the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] does not meet the preset condition C₂. C₂ here refers to that the quantity K, which is obtained according to the foregoing manner, of values greater than 0 among S_(b1), S_(b2), . . . , and S_(b255) is an even number. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂.

Therefore, as shown in FIG. 32, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in the windows W_(i1)[k_(i)−169, k_(i)] and W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition is used to determine whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition. As shown in FIG. 32, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i4) [k_(i)−172, k_(i)−3] meets a preset condition C₄, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in the windows W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], and W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition is used to determine whether the at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets the preset condition C₄. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i4) [k_(i)−172, k_(i)−3] meets the preset condition C₄. As shown in FIG. 32, “

” represents 1 byte selected when it is determined whether at least a part of data in the window W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Then, the method for determining whether at least a part of data in the windows W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], and W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition is used to determine whether the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets the preset condition C₅. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i4)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅.

When the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from a point p_(i5) along a direction of searching for a data stream dividing point, and a next potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 33, W_(j1) represents a window, and 5 bytes are selected to determine whether the at least a part of data in the window meets the preset condition C₁. In FIG. 33, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as a_(m,1)′, . . . , and a_(m,8)′, representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} a_{1,1}^{\prime} & a_{1,2}^{\prime} & \ldots & a_{1,8}^{\prime} \\ a_{2,1}^{\prime} & a_{2,2}^{\prime} & \ldots & a_{2,8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ a_{255,1}^{\prime} & a_{255,2}^{\prime} & \ldots & a_{255,8}^{\prime} \end{pmatrix},$

where when a_(m,n)′=1, V_(am,n)′=1, and when a_(m,n)′=0, V_(am,n)′=−1, where a_(m,n)′ represents any one of a_(m,n)′, . . . , and a_(m,8)′, and a matrix V_(a)′ is obtained according to a conversion relationship between a_(m,n)′ and V_(am,n)′ from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{a\; 1},1}^{\prime} & V_{{a\; 1},2}^{\prime} & \ldots & V_{{a\; 1},8}^{\prime} \\ V_{{a\; 2},1}^{\prime} & V_{{a\; 2},2}^{\prime} & \ldots & V_{{a\; 2},8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{a\; 255},1}^{\prime} & V_{{a\; 255},2}^{\prime} & \ldots & V_{{a\; 255},8}^{\prime} \end{pmatrix}.$

A manner of determining whether at least a part of data in the window meets a preset condition is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets a preset condition. Therefore the matrix R is used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix},$

and random numbers of an mth row of the matrix V_(a)′ and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)′=V_(am,1)′*h_(m,1)+V_(am,2)′*h_(m,2)+ . . . +V_(am,8)′*h_(m,8). S_(a1)′, S_(a2)′, . . . , and S_(a255)′ are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is counted. Because the matrix R follows normal distribution, S_(am)′ still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is greater than 0 is ½, and therefore K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(a1)′, S_(a2)′, . . . , and S_(a255)′ is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. When K is an odd number, it indicates that the at least a part of data in W_(j1), [k_(j)−169, k_(j)] does not meet the preset condition C₁.

A manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2) [k_(j)−170, k_(j)−1] meets the preset condition C₂. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected 5 bytes of data are used repeatedly 51 times to obtain 255 bytes in total, so as to increase randomness. Each byte thereof is formed by 8 bits, which are denoted as b_(m,1)′, . . . , and b_(m,8)′, representing the 1st bit to the 8th bit of an mth byte in the 255 bytes, and therefore, bits corresponding to the 255 bytes may be represented as:

$\begin{pmatrix} b_{1,1}^{\prime} & b_{1,2}^{\prime} & \ldots & b_{1,8}^{\prime} \\ b_{2,1}^{\prime} & b_{2,2}^{\prime} & \ldots & b_{2,8}^{\prime} \\ \vdots & \vdots & \vdots & \vdots \\ b_{255,1}^{\prime} & b_{255,2}^{\prime} & \ldots & b_{255,8}^{\prime} \end{pmatrix},$

where when b_(m,n)′=1, V_(bm,n)′=1, and when b_(m,n)′=0, V_(bm,n)′=−1, where b_(m,n)′ represents any one of b_(m,1)′, . . . , and b_(m,8)′, and a matrix V_(b)′ is obtained according to a conversion relationship between b_(m,n)′ and V_(bm,n)′ from the bits corresponding to the 255 bytes, and may be represented as:

$\begin{pmatrix} V_{{b\; 1},1} & V_{{b\; 1},2} & \ldots & V_{{b\; 1},8} \\ V_{{b\; 2},1} & V_{{b\; 2},2} & \ldots & V_{{b\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{b\; 255},1} & V_{{b\; 255},2} & \ldots & V_{{b\; 255},8} \end{pmatrix}.$

A manner of determining whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₁, and therefore the matrix R is still used:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,1} & h_{255,2} & \ldots & h_{255,8} \end{pmatrix}.$

Random numbers of an mth row of the matrix V_(b)′ and the mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(bm)′=V_(bm,1)′*h_(m,1)+_(bm,2)′*h_(m,2)+ . . . +V_(bm,8)*h_(m,8). S_(b1)′, S_(b2)′, . . . , and S_(b255)′ are obtained according to the method, and a quantity K of values meeting a specific condition (being greater than 0 is used as an example here) among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is counted. Because the matrix R follows normal distribution, S_(bm)′ still follows normal distribution as the matrix R does. According to the probability theory, the probability that a random number in normal distribution is greater than 0 is ½; a probability that each value among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is greater than 0 is ½, and therefore K meets binomial distribution: P(k=n)=C₂₅₅ ^(n)(½)^(n)(½)^(255-n)=C₂₅₅ ^(n)(½)²⁵⁵. According to a counting result, it is determined whether the quantity K of values greater than 0 among S_(b1)′, S_(b2)′, . . . , and S_(b255)′ is an even number; the probability that a random number in binomial distribution is an even number is ½, and therefore, K meets a condition with a probability of ½. When K is an even number, it indicates that the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. When K is an odd number, it indicates that the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] does not meet the preset condition C₂. Similarly, a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets a preset condition C₁₁, which are not described herein again.

In this embodiment, it is determined, by using a random function, whether at least a part of data in a window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z). The implementation manner shown in FIG. 21 is still used as an example. According to a rule preset on a deduplication server 103, a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. As shown in FIG. 32, W_(i1) represents the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. In one implementation manner, a hash function is used to calculate the selected 5 bytes, and values obtained by means of calculation by using the hash function are in fixed and even distribution. If a value obtained by means of calculation by using the hash function is an even number, it is determined that the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. That is, C₁ represents that a value obtained according to the foregoing manner and by means of calculation by using the hash function is an even number. Therefore, a probability that at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition is ½. In the implementation manner shown in FIG. 21, it is determined, by using a hash function, whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂, whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition C₄, and whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅. For specific implementation, reference may be made to the description of the manner of determining, by using a hash function, whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁ in the implementation manner shown in FIG. 21, which is not described herein again.

When the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from the potential dividing point k_(i) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 33, W_(j1) represents the window W_(j1)[k_(j)−169, k_(j)], and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. In FIG. 33, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. The 5 bytes selected from the window W_(j1)[k_(j)−169, k_(j)] are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. In FIG. 33, a manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. In FIG. 33, a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. In FIG. 33, a manner of determining whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄ is the same as a manner of determining whether at least a part of data in the window W_(i4)[k_(i)−172, k_(i)−3] meets the preset condition C₄. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, and there are 42 bytes between two adjacent selected bytes “

”. Selected 5 bytes are calculated by using a hash function. If an obtained value is an even number, the at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄. According to the foregoing method, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets a preset condition C₁₁, which are not described herein again.

In this embodiment, it is determined, by using a random function, whether at least a part of data in a window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z). The implementation manner shown in FIG. 21 is used as an example. According to a rule preset on a deduplication server 103, a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. As shown in FIG. 32, W_(i1) represents the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁, a₂, a₃, a₄, and a₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(r) of a₁, a₂, a₃, a₄, and a₅ meets 0≦a_(r)≦255. a₁, a₂, a₃, a₄, and a₅ form a 1*5 matrix. 256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix R that is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

The matrix R is searched for a corresponding value according to the value of a₁ and a column in which a₁ is located. For example, if a₁=36, and a₁ is located in a 1st column, a value corresponding to h_(36,1) is searched for. The matrix R is searched for a corresponding value according to the value of a₂ and a column in which a₂ is located. For example, if a₂=48, and a₂ is located in a 2nd column, a value corresponding to h_(48,2) is searched for. The matrix R is searched for a corresponding value according to the value of a₃ and a column in which a₃ is located. For example, if a₃=26, and a₃ is located in a 3rd column, a value corresponding to h_(26,3) is searched for. The matrix R is searched for a corresponding value according to the value of a₄ and a column in which where a₄ is located. For example, if a₄=26, and a₄ is located in a 4th column, a value corresponding to h_(26,4) is searched for. The matrix R is searched for a corresponding value according to the value of a₅ and a column in which a₅ is located. For example, if a₅=88, and a₅ is located in a 5th column, a value corresponding to h_(88,5) is searched for. S₁=h_(36,1)+h_(48,2)+h_(26,3)+h_(26,4)+h_(88,5), and because the matrix R follows binomial distribution, S₁ also follows binomial distribution. When S₁ is an even number, the at least a part of data in W_(j1) [k_(i)−169, k_(i)] meets the preset condition C₁; when S₁ is an odd number, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] does not meet the preset condition C₁. A probability that S₁ is an even number is ½, and C₁ represents that S₁ that is obtained by means of calculation according to the foregoing manner is an even number. In the embodiment shown in FIG. 21, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. As shown in FIG. 32, “

” represents 1 byte separately selected when it is determined whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂. In FIG. 32, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁, b₂, b₃, b₄, and b₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(r) of b₁, b₂, b₃, b₄, and b₅ meets 0≦b_(r)≦255. b₁, b₂, b₃, b₄ and b₅ form a 1*5 matrix. In this implementation manner, manners of determining whether at least a part of data in W₁ and W_(ij2) meets a preset condition are the same, and therefore the matrix R is still used. The matrix R is searched for a corresponding value according to the value of b₁ and a column in which b₁ is located. For example, if b₁=66, and b₁ is located in a 1st column, a value corresponding to h_(66,1) is searched for. The matrix R is searched for a corresponding value according to the value of b₂ and a column in which b₂ is located. For example, if b₂=48, and b₂ is located in a 2nd column, a value corresponding to h_(48,2) is searched for. The matrix R is searched for a corresponding value according to the value of b₃ and a column in which b₃ is located. For example, if b₃=99, and b₃ is located in a 3rd column, a value corresponding to h_(99,3) is searched for. The matrix R is searched for a corresponding value according to the value of b₄ and a column in which b₄ is located. For example, if b₄=26, and b₄ is located in a 4th column, a value corresponding to h_(26,4) is searched for. The matrix R is searched for a corresponding value according to the value of b₅ and a column in which b₅ is located. For example, if b₅=90, and b₅ is located in a 5th column, a value corresponding to h_(90,5) is searched for. S₂=h_(66,1)+h_(48,2)+h_(99,3)+h_(26,4)+h_(90,5), and because the matrix R follows binomial distribution, S₂ also follows binomial distribution. When S₂ is an even number, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂; when S₂ is an odd number, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] does not meet the preset condition C₂. A probability that S₂ is an even number is ½. In the embodiment shown in FIG. 21, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂. By using the same rule, separately, it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−174, k_(i)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−175, k_(i)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−176, k_(i)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−177, k_(i)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−178, k_(i)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−179, k_(i)−10] meets a preset condition C₁₁. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from the potential dividing point k_(i) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 33, W_(j1), represents the window W_(j1)[k_(j)−169, k_(j)], and it is determined whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 33, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁′, a₂′, a₃′, a₄′, and a₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(r)′ of a₁′, a₂′, a₃′, a₄′, and a₅′ meets 0≦a_(r)′≦255. a₁′, a₂′, a₃′, a₄′, and a₅′ form a 1*5 matrix. The manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, the matrix R is still used, and is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

The matrix R is searched for a corresponding value according to the value of a₁′ and a column in which a₁′ is located. For example, if a₁′=16, and a₁′ is located in a 1st column, a value corresponding to h_(16,1) is searched for. The matrix R is searched for a corresponding value according to the value of a₂′ and a column in which a₂′ is located. For example, if a₂′=98, and a₂′ is located in a 2nd column, a value corresponding to h_(98,2) is searched for. The matrix R is searched for a corresponding value according to the value of a₃′ and a column in which a₃′ is located. For example, if a₃′=56, and a₃′ is located in a 3rd column, a value corresponding to h_(56,3) is searched for. The matrix R is searched for a corresponding value according to the value of a₄′ and a column in which a₄′ is located. For example, if a₄′=36, and a₄′ is located in a 4th column, a value corresponding to h_(36,4) is searched for. The matrix R is searched for a corresponding value according to the value of a₅′ and a column in which a₅′ is located. For example, if a₅′=99, and a₅′ is located in a 5th column, a value corresponding to h_(99,5) is searched for. S₁′=h_(16,1)+h_(98,2)+h_(56,3)+h_(36,4)+h_(99,5), and because the matrix R follows binomial distribution, S₁′ also follows binomial distribution. When S₁′ is an even number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁; when S₁′ is an odd number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] does not meet the preset condition C₁. A probability that S₁′ is an even number is ½.

A manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2) [k_(j2)−170, k_(j)−1] meets the preset condition C₂. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2), [k_(j)−170, k_(j)−1] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. Selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁′, b₂′, b₃′, b₄′, and b₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(r)′ of b₁′, b₂′, b₃′, b₄′, and b₅′ meets 0≦b_(r)′≦255. b₁′, b₂′, b₃′, b₄′, and b₅′ form a 1*5 matrix. The matrix R the same as that used when it is determined whether the at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is used. The matrix R is searched for a corresponding value according to the value of b₁′ and a column in which b₁′ is located. For example, if b₁′=210, and b₁′ is located in a 1st column, a value corresponding to h_(210,1) is searched for. The matrix R is searched for a corresponding value according to the value of b₂′ and a column in which b₂′ is located. For example, if b₂′=156, and b₂′ is located in a 2nd column, a value corresponding to h_(156,2) is searched for. The matrix R is searched for a corresponding value according to the value of b₃′ and a column in which b₃′ is located. For example, if b₃′=144, and b₃′ is located in a 3rd column, a value corresponding to h_(144,3) is searched for. The matrix R is searched for a corresponding value according to the value of b₄′ and a column in which b₄′ is located. For example, if b₄′=60, and b₄′ is located in a 4th column, a value corresponding to h_(60,4) is searched for. The matrix R is searched for a corresponding value according to the value of b₅′ and a column in which b₅′ is located. For example, if b₅′=90, and b₅′ is located in a 5th column, a value corresponding to h_(90,5) is searched for. S₂′=h_(210,1)+h_(156,2)+h_(144,3)+h_(60,4)+h_(90,5). The same as the determining condition of S₂, when S₂′ is an even number, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and when S₂′ is an odd number, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] does not meet the preset condition C₂. A probability that S₂′ is an even number is ½.

Similarly, a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets the preset condition C₁₁, which are not described herein again.

In this embodiment, it is determined, by using a random function, whether at least a part of data in a window W_(iz)[p_(iz)−A_(z), p_(iz)+B_(z)] meets a preset condition C_(z). The implementation manner shown in FIG. 21 is used as an example. According to a rule preset on a deduplication server 103, a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition C₁. As shown in FIG. 32, W_(i1) represent the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁, a₂, a₃, a₄, and a₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(s) of a₁, a₂, a₃, a₄, and a₅ meets 0≦a_(s)≦255. a₁, a₂, a₃, a₄ and a₅ form a 1*5 matrix. 256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix R that is represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}.$

256*5 random numbers are selected from random numbers that follow binomial distribution to form a matrix G that is represented as:

$\begin{pmatrix} g_{0,1} & g_{0,2} & \ldots & g_{0,5} \\ g_{1,1} & g_{1,2} & \ldots & g_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ g_{255,5} & g_{255,5} & \ldots & g_{255,5} \end{pmatrix}.$

According to the value of a₁ and a column in which a₁ is located, for example, a₁=36, and a₁ is located in a 1st column, the matrix R is searched for a value corresponding to h_(36,1), and the matrix G is searched for a value corresponding to g_(36,1). According to the value of a₂ and a column in which a₂ is located, for example, a₂=48, and a₂ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(48,2), and the matrix G is searched for a value corresponding to g_(48,2). According to the value of a₃ and a column in which a₃ is located, for example, a₃=26, and a₃ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(26,3), and the matrix G is searched for a value corresponding to g_(26,3). According to the value of a₄ and a column in which a₄ is located, for example, a₄=26, and a₄ is located in a 4th column, the matrix R is searched for a value corresponding to h_(26,4), and the matrix G is searched for a value corresponding to g_(26,4). According to the value of a₅ and a column in which a₅ is located, for example, a₅=88, and a₅ is located in a 5th column, the matrix R is searched for a value corresponding to h_(88,5), and the matrix G is searched for a value corresponding to g_(88,5). S_(1h)=h_(36,1)+h_(48,2)+h_(26,3)+h_(26,4)+h_(88,5), and because the matrix R follows binomial distribution, S_(1h) also follows binomial distribution. S_(1g)=g_(36,1)+g_(48,2)+g_(26,4)+g_(26,4)+g_(88,5), and because the matrix G follows binomial distribution, S_(1g) also follows binomial distribution. When one of S_(1h) and S_(1g) is an even number, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁; when both S_(1h) and S_(1g) are odd numbers, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] does not meet the preset condition C₁, and C₁ indicates that one of S_(1h) and S_(1g) obtained according to the foregoing method is an even number. Because both S_(1h) and S_(1g) follow binomial distribution, a probability that S_(1h) is an even number is ½, a probability that S_(1g) is an even number is ½, and a probability that one of S_(1h) and S_(1g) is an even number is 1−¼=¾. Therefore, a probability that the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁ is ¾. In the embodiment shown in FIG. 21, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In the implementation manner shown in FIG. 21, for W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−178, k_(i)−9], and W_(i11)[k_(i)−179, k_(i)−10], the windows are the same in size, that is, all the windows have a size of 169 bytes, and meanwhile manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 32, “

” represents 1 byte separately selected when it is determined whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂. In FIG. 32, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁, b₂, b₃, b₄, and b₅ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(s) of b₁, b₂, b₃, b₄ and b₅ meets 0≦b_(s)≦255. b₁, b₂, b₃, b₄, and b₅ form a 1*5 matrix. In this implementation manner, manners of determining whether at least a part of data in each window meets a preset condition are the same, and therefore the same matrices R and G are still used. According to the value of b₁ and a column in which b₁ is located, for example, b₁=66, and b₁ is located in a 1st column, the matrix R is searched for a value corresponding to h_(66,1), and the matrix G is searched for a value corresponding to g_(66,1). According to the value of b₂ and a column in which b₂ is located, for example, b₂=48, and b₂ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(48,2), and the matrix G is searched for a value corresponding to g_(48,2). According to the value of b₃ and a column in which b₃ is located, for example, b₃=99, and b₃ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(99,3), and the matrix G is searched for a value corresponding to g_(99,3). According to the value of b₄ and a column in which b₄ is located, for example, b₄=26, and b₄ is located in a 4th column, the matrix R is searched for a value corresponding to h_(26,4), and the matrix G is searched for a value corresponding to g_(26,4). According to the value of b₅ and a column in which b₅ is located, for example, b₅=90, and b₅ is located in a 5th column, the matrix R is searched for a value corresponding to h_(90,5), and the matrix G is searched for a value corresponding to g_(90,5). S_(2h)=h_(66,1)+h_(48,2)+h_(99,3)+h_(26,4)+h_(90,5), and because the matrix R follows binomial distribution, S_(2h) also follows binomial distribution. S_(2g)=g_(66,1)+g_(48,2)+g_(99,3)+g_(26,4)+g_(90,5), and because the matrix G follows binomial distribution, S_(2g) also follows binomial distribution. When one of S_(2h) and S_(2g) is an even number, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂; when both S_(2h) and S_(2g) are odd numbers, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] does not meet the preset condition C₂. A probability that one of S_(2h) and S_(2g) is an even number is ¾. In the embodiment shown in FIG. 21, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂. By using the same rule, separately, it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−174, k_(i)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−175, k_(i)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(i)−176, k_(i)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−177, k_(i)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−178, k_(i)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(i)−179, k_(i)−10] meets a preset condition C₁₁. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from the potential dividing point k_(i) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 33, W_(j1) represents the window W_(j1)[k_(j)−169, k_(j)], and it is determined whether the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. In FIG. 33, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are converted into decimal values that are represented as a₁′, a₂′, a₃′, a₄′, and a₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any a_(s)′ of a₁′, a₂′, a₃′, a₄′, and a₅′ meets 0≦a_(s)′≦255. a₁′, a₂′, a₃′, a₄′ and a₅′ form a 1*5 matrix. The matrices R and G the same as those used when it is determined whether the at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁ are used, and are represented as:

$\begin{pmatrix} h_{0,1} & h_{0,2} & \ldots & h_{0,5} \\ h_{1,1} & h_{1,2} & \ldots & h_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ h_{255,5} & h_{255,5} & \ldots & h_{255,5} \end{pmatrix}\mspace{14mu} {and}\mspace{14mu} \begin{pmatrix} g_{0,1} & g_{0,2} & \ldots & g_{0,5} \\ g_{1,1} & g_{1,2} & \ldots & g_{1,5} \\ \vdots & \vdots & \vdots & \vdots \\ g_{255,5} & g_{255,5} & \ldots & g_{255,5} \end{pmatrix}$

respectively.

According to the value of a₁′ and a column in which a₁′ is located, for example, a₁′=16, and a₁′ is located in a 1st column, the matrix R is searched for a value corresponding to h_(16,1), and the matrix G is searched for a value corresponding to g_(16,1). According to the value of a₂′ and a column in which a₂′ is located, for example, a₂′=98, and a₂′ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(98,2), and the matrix G is searched for a value corresponding to g_(98,2). According to the value of a₃′ and a column in which a₃′ is located, for example, a₃′=56, and a₃′ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(56,3), and the matrix G is searched for a value corresponding to g_(56,3). According to the value of a₄′ and a column in which a₄′ is located, for example, a₄′=36, and a₄′ is located in a 4th column, the matrix R is searched for a value corresponding to h_(36,4), and the matrix G is searched for a value corresponding to g_(36,4). According to the value of a₅′ and a column in which a₅′ is located, for example, a₅′=99, and a₅′ is located in a 5th column, the matrix R is searched for a value corresponding to h_(99,5), and the matrix G is searched for a value corresponding to g_(99,5). S_(1h)′=h_(16,1)+h_(98,2)+h_(56,3)+h_(36,4)+h_(99,5), and because the matrix R follows binomial distribution, S_(1h)′ also follows binomial distribution. S_(1g)′=g_(16,1)+g_(98,2)+g_(56,3)+g_(36,4)+g_(99,5), and because the matrix G follows binomial distribution, S_(1g)′ also follows binomial distribution. When one of S_(1h)′ and S_(1g)′ is an even number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁; when both S_(1h)′ and S_(1g)′ are odd numbers, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] does not meet the preset condition C₁. A probability that one of S_(1h)′ and S_(1g)′ is an even number is ¾.

A manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. In FIG. 33, selected bytes are represented as sequence numbers 170, 128, 86, 44 and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are converted into decimal values that are represented as b₁′, b₂′, b₃′, b₄′, and b₅′ respectively. Because 1 byte is formed by 8 bits, each byte “

” serves as a value, and any b_(s)′ of b₁′, b₂′, b₃′, b₄′, and b₅′ meets 0≦b_(s)′≦255. b₁′, b₂′, b₃′, b₄′, and b₅′ form a 1*5 matrix. The matrices R and G the same as those used when it is determined whether the at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ are used. According to the value of b₁′ and a column in which b₁′ is located, for example, b₁′=210, and b₁′ is located in a 1st column, the matrix R is searched for a value corresponding to h_(210,1), and the matrix G is searched for a value corresponding to g_(210,1). According to the value of b₂′ and a column in which b₂′ is located, for example, b₂′=156, and b₂′ is located in a 2nd column, the matrix R is searched for a value corresponding to h_(156,2), and the matrix G is searched for a value corresponding to g_(156,2). According to the value of b₃′ and a column in which b₃′ is located, for example, b₃′=144, and b₃′ is located in a 3rd column, the matrix R is searched for a value corresponding to h_(144,3), and the matrix G is searched for a value corresponding to g_(144,3). According to the value of b₄′ and a column in which b₄′ is located, for example, b_(4′)=60, and b₄′ is located in a 4th column, the matrix R is searched for a value corresponding to h_(60,4), and the matrix G is searched for a value corresponding to g_(60,4). According to the value of b₅′ and a column in which b₅′ is located, for example, b₅′=90, and b₅′ is located in a 5th column, the matrix R is searched for a value corresponding to h_(90,5), and the matrix G is searched for a value corresponding to g_(90,5). S_(2h)′=h_(210,1)+h_(156,2)+h_(144,3)+h_(60,4)+h_(90,5), and S_(2g)′=g_(210,1)+g_(156,2)+g_(144,3)+g_(60,4)+g_(90,5). When one of S_(2h)′ and S_(2g)′ is an even number, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂; when both S_(2h)′ and S_(2g)′ are odd numbers, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] does not meet the preset condition C₂. A probability that one of S_(2h)′ and S_(2g)′ is an even number is ¾.

Similarly, a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(i)−171, k_(j)−2] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11) [k_(j)−179, k_(j)−10] meets the preset condition C₁₁, which are not described herein again.

In this embodiment, it is determined, by using a random function, whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z). The implementation manner shown in FIG. 21 is used as an example. According to a rule preset on a deduplication server 103, a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition C₁. As shown in FIG. 32, W_(i1) represents the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are regarded as 40 sequential bits, which are represented as a₁, a₂, a₃, a₄, . . . , and a₄₀ separately. For any a_(t) of a₁, a₂, a₃, a₄, . . . , and a₄₀, when a_(t)=0, V_(at)=−1, and when a_(t)=1, V_(at)=1. According to a correspondence between a_(t) and V_(at), V_(a1), V_(a2), V_(a3), V_(a4), . . . , and V_(a40) are generated. 40 random numbers are selected from random numbers that follow normal distribution, and are represented as: h₁, h₂, h₃, h₄, . . . , and h₄₀ separately. S_(a)=V_(a1)*h₁+V_(a2)*h₂+V_(a3)*h₃+V_(a4)*h₄+ . . . +V_(a40)*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(a) also follows normal distribution. When S_(a) is a positive number, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁; when S_(a) is a negative number or 0, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] does not meet the preset condition C₁. A probability that S_(a) is a positive number is ½. In the embodiment shown in FIG. 21, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. As shown in FIG. 32, “

” represents 1 byte separately selected when it is determined whether at least a part of data in a window W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂. In FIG. 32, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are regarded as 40 sequential bits, which are represented as b₁, b₂, b₃, b₄, . . . , and b₄₀ separately. For any b_(t) of b₁, b₂, b₃, b₄, . . . , and b₄₀, when b_(t)=0, V_(bt)=−1, and when b_(t)=1, V_(bt)=1. According to a correspondence between b_(t) and V_(bt), V_(b1), V_(b2), V_(b3), V_(b4), . . . , and V_(b40) are generated. A manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂. Therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀, and S_(b)=V_(b1)*h₁+V_(b2)*h₂+V_(b3)*h₃+V_(b4)*h₄+ . . . +V_(b40)*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(b) also follows normal distribution. When S_(b) is a positive number, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂; when S_(b) is a negative number or 0, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] does not meet the preset condition C₂. A probability that S_(b) is a positive number is ½. In the embodiment shown in FIG. 21, the at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂. By using the same rule, separately it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅, it is determined whether at least a part of data in W_(i6)[k_(i)−174, k_(i)−5] meets a preset condition C₆, it is determined whether at least a part of data in W_(i7)[k_(i)−175, k_(i)−6] meets a preset condition C₇, it is determined whether at least a part of data in W_(i8)[k_(j)−176, k_(i)−7] meets a preset condition C₈, it is determined whether at least a part of data in W_(i9)[k_(i)−177, k_(j)−8] meets a preset condition C₉, it is determined whether at least a part of data in W_(i10)[k_(i)−178, k_(i)−9] meets a preset condition C₁₀, and it is determined whether at least a part of data in W_(i11)[k_(j)−179, k_(i)−10] meets a preset condition C₁₁. In the implementation manner shown in FIG. 21, the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from the potential dividing point k_(i) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j), [k_(j)−169, k_(j)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, as shown in FIG. 33, W_(j1) represents the window W_(j1)[k_(j)−169, k_(j)], and 5 bytes are selected to determine whether at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. In FIG. 33, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 in FIG. 33 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 are regarded as 40 sequential bits, which are represented as a₁′, a₂′, a₃′, a₄′, . . . , and a₄₀′ separately. For any a_(t)′ of a₁′, a₂′, a₃′, a₄′, . . . , and a₄₀′, when a_(t)′=0, V_(at)′=−1, and when a_(t)′=1, V_(at)′=1. According to a correspondence between a_(t)′ and V_(at)′, V_(a1)′, V_(a2)′, V_(a3)′, V_(a4)′, . . . , and V_(a40)′ are generated. The manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as the manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀. S_(a)′=V_(a1)′*h₁+V_(a2)′*h₂+V_(a3)′*h₃+V_(a4)′*h₄+ . . . +V_(a40)′*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(a)′ also follows normal distribution. When S_(a)′ is a positive number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁; when S_(a)′ is a negative number or 0, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] does not meet the preset condition C₁. A probability that S_(a)′ is a positive number is ½.

The manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. Therefore, as shown in FIG. 33, “

” represents 1 byte selected when it is determined whether the at least a part of data in the window W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and there are 42 bytes between two adjacent selected bytes. In FIG. 33, selected bytes are represented as sequence numbers 170, 128, 86, 44, and 2 separately, and there are 42 bytes between two adjacent selected bytes. The bytes “

” whose sequence numbers are 170, 128, 86, 44, and 2 are regarded as 40 sequential bits, which are represented as b₁′, b₂′, b₃′, b₄′, . . . , and b₄₀′ separately. For any b₁′ of b₁′, b₂′, b₃′, b₄′, . . . , and b₄₀′, when b_(t)′=0, V_(bt)′=−1, and when b_(t)′=1, V_(bt)′=1. According to a correspondence between b_(t)′ and V_(bt)′, V_(b1)′, V_(b2)′, V_(b3)′, V_(b4)′, . . . , and V_(b40)′ are generated. The manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as the manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂. Therefore, the same random numbers are used: h₁, h₂, h₃, h₄, . . . , and h₄₀, and S_(b)′=V_(b1)′*h₁+V_(b2)′*h₂+V_(b3)′*h₃+V_(b4)′*h₄+ . . . +V_(b40)′*h₄₀. Because h₁, h₂, h₃, h₄, . . . , and h₄₀ follow normal distribution, S_(b)′ also follows normal distribution. When S_(b)′ is a positive number, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂; when S_(b)′ is a negative number or 0, the at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] does not meet the preset condition C₂. A probability that S_(b)′ is a positive number is ½.

Similarly, a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets the preset condition C₁₁, which are not described herein again.

In this embodiment, it is determined, by using a random function, whether at least a part of data in a window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z). The implementation manner shown in FIG. 21 is still used as an example. According to a rule preset on a deduplication server 103, for the potential dividing point k_(i), a window W_(i1)[k_(i)−169, k_(i)] is determined for a potential dividing point k_(i), and it is determined whether at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets a preset condition C₁. As shown in FIG. 32, W_(i1) represents the window W_(i1)[k_(i)−169, k_(i)], and 5 bytes are selected to determine whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. In FIG. 32, each of bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes. Each of the bytes “

” whose sequence numbers are 169, 127, 85, 43, and 1 is converted into 1 decimal number, the range of which is 0−(2̂40−1). An even distribution random number generator is used to generate 1 designated value for each decimal number in 0−(2̂40−1), and a correspondence R between each decimal number in 0−(2̂40−1) and the designated value is recorded. Once being designated, a designated value corresponding to a decimal number remains unchanged, and the designated value follows even distribution. If the designated value is an even number, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁; if the designated value is an odd number, the at least a part of data in W_(i1)[k_(i)−169, k_(i)] does not meet the preset condition C₁. C₁ represents that the designated value obtained according to the foregoing method is an even number. Because a probability that a random number in even distribution is an even number is ½, a probability that the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁ is ½. In the implementation manner shown in FIG. 21, by using the same rule, separately, it is determined whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets a preset condition C₂, it is determined whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets a preset condition C₃, it is determined whether at least a part of data in W_(i4)[k_(i)−172, k_(i)−3] meets a preset condition C₄, it is determined whether at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] meets a preset condition C₅, which are not described herein again.

When the at least a part of data in W_(i5)[k_(i)−173, k_(i)−4] does not meet the preset condition C₅, 7 bytes are skipped from the potential dividing point k_(i) along a direction of searching for a data stream dividing point, and a current potential dividing point k_(j) is obtained at an end position of a 7th byte. As shown in FIG. 22, according to the rule preset on the deduplication server 103, a window W_(j1)[k_(j)−169, k_(j)] is determined for the potential dividing point k_(j). A manner of determining whether at least a part of data in the window W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is the same as a manner of determining whether at least a part of data in the window W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. Therefore, the same correspondence R between each decimal number in 0−(2̂40−1) and a designated value is used. As shown in FIG. 33, W_(j1) represents the window, and 5 bytes are selected to determine whether the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁. In FIG. 33, “

” represents 1 selected byte, and there are 42 bytes between two adjacent selected bytes “

”. Each of bytes “

” whose sequence numbers 169, 127, 85, 43, and 1 is converted into 1 decimal number, and R is searched for a designated value corresponding to the decimal number. If the designated value is an even number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁; if the designated value is an odd number, the at least a part of data in W_(j1)[k_(j)−169, k_(j)] does not meet the preset condition C₁. Because a probability that a random number in even distribution is an even number is ½, a probability that the at least a part of data in W_(j1)[k_(j)−169, k_(j)] meets the preset condition C₁ is ½. Similarly, a manner of determining whether at least a part of data in W_(i2)[k_(i)−170, k_(i)−1] meets the preset condition C₂ is the same as a manner of determining whether at least a part of data in W_(j2)[k_(j)−170, k_(j)−1] meets the preset condition C₂, and a manner of determining whether at least a part of data in W_(i3)[k_(i)−171, k_(i)−2] meets the preset condition C₃ is the same as a manner of determining whether at least a part of data in W_(j3)[k_(j)−171, k_(j)−2] meets the preset condition C₃. Similarly, it is determined whether at least a part of data in W_(j4)[k_(j)−172, k_(j)−3] meets the preset condition C₄, it is determined whether at least a part of data in W_(j5)[k_(j)−173, k_(j)−4] meets the preset condition C₅, it is determined whether at least a part of data in W_(j6)[k_(j)−174, k_(j)−5] meets the preset condition C₆, it is determined whether at least a part of data in W_(j7)[k_(j)−175, k_(j)−6] meets the preset condition C₇, it is determined whether at least a part of data in W_(j8)[k_(j)−176, k_(j)−7] meets the preset condition C₈, it is determined whether at least a part of data in W_(j9)[k_(j)−177, k_(j)−8] meets the preset condition C₉, it is determined whether at least a part of data in W_(j10)[k_(j)−178, k_(j)−9] meets the preset condition C₁₀, and it is determined whether at least a part of data in W_(j11)[k_(j)−179, k_(j)−10] meets the preset condition C₁₁, which are not described herein again.

The deduplication server 103 in the embodiment of the present invention shown in FIG. 1 refers to an apparatus that can implement a technical solution described in an embodiment of the present invention, and as shown in FIG. 18, usually includes a central processing unit, a primary memory, and an input/output interface. The central processing unit, the primary memory, and the input/output interface communicate with each other. The main memory stores an executable instruction, and the central processing unit executes the executable instruction stored in the main memory to perform a specific function, so that the deduplication server 103 has a specific function, for example, searching for a data stream dividing point described in FIG. 20 to FIG. 33 in the embodiments of the present invention. Therefore, as shown in FIG. 19, according to the embodiments of the present invention shown in FIG. 20 to FIG. 33, for the deduplication server 103, a rule is preset on the deduplication server 103, where the rule is: for a potential dividing point k, determining M windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers.

The deduplication server 103 includes a determining unit 1901 and a judging and processing unit 1902. The determining unit 1901 is configured to perform step (a):

(a) determining a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for a current potential dividing point k_(i) according to the rule, where i and z are integers, and 1≦z≦M.

The judging and processing unit 1902 is configured to: determine whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z);

when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skip N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along a direction of searching for a data stream dividing point, where N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, where the determining unit 1901 performs step (a) for the new potential dividing point; and

when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), select the current potential dividing point k_(i) as a data stream dividing point.

Further, the rule further includes that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f) and C_(e)=C_(f). Further, the rule further includes that A_(e) and A_(f) are positive integers. Further, the rule further includes A_(e)−1=A_(f) and B_(e)+1=B_(f).

Further, the judging and processing unit 1902 is specifically configured to determine, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z). Still further, the judging and processing unit 1902 specifically determines, by using a hash function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

Further, the judging and processing unit 1902 is configured to: when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skip the N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and the determining unit 1901 performs step (a) for the new potential dividing point, where according to the rule, a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], where the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.

Further, that the judging and processing unit 1902 determines, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically includes:

selecting F bytes in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, where F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes may be represented as:

$\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F^{*}H},1} & a_{{F^{*}H},2} & \ldots & a_{{F^{*}H},8} \end{pmatrix},$

where when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, where a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as:

$\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{{aF}^{*}H},1} & V_{{{aF}^{*}H},2} & \ldots & V_{{{aF}^{*}H},8} \end{pmatrix},$

F*H*8 random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as:

$\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F^{*}H},1} & h_{{F^{*}H},2} & \ldots & h_{{F^{*}H},8} \end{pmatrix},$

random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1), S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).

According to the method for searching for a data stream dividing point based on a server in the embodiments of the present invention shown in FIG. 20 to FIG. 33, a window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] is determined for a potential dividing point k_(i), where, x indicates consecutive natural numbers from 1 to M separately, and M≧2. It may be determined in parallel whether at least a part of data in each window of M windows meets a preset condition C_(x), or it may be determined sequentially whether at least a part of data in windows meets a preset condition, or it may be first determined that at least a part of data in a window W_(i1)[p_(i1)−A₁, p_(i1)+B₁] meets a preset condition C₁, then it is determined that at least a part of data in W_(i2)[p_(i2)−A₂, p_(i2)+B₂] meets a preset condition C₂, until it is determined that at least a part of data in W_(im)[p_(im)−A_(m), p_(im)+B_(m)] meets a preset condition C_(m). Other windows in this embodiment are determined in a same manner as the above, which is not described again.

In addition, according to the embodiments of the present invention shown in FIG. 20 to FIG. 33, a rule is preset on the deduplication server 103, where the rule is: determining M windows W_(x)[k−A_(x), k+B_(x)] for a potential dividing point k and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to M separately, and M≧2. In the preset rule, A₁, A₂, A₃, . . . , and A_(m) may be not all equal, B₁, B₂, B₃, . . . , and B_(m) may be not all equal, and C₁, C₂, C₃, . . . , and C_(M) may also be not all the same. In the implementation manner shown in FIG. 21, for W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−178, k_(i)−9], and W_(i11)[k_(i)−179, k_(i)−10], the windows are the same in size, that is, all the windows have a size of 169 bytes, and meanwhile manners of determining whether at least a part of data in a window meets a preset condition are also the same. For details, refer to the foregoing description of determining whether the at least a part of data in W_(i1)[k_(i)−169, k_(i)] meets the preset condition C₁. However, in the implementation manner shown in FIG. 11, the windows W_(i1)[k_(i)−169, k_(i)], W_(i2)[k_(i)−170, k_(i)−1], W_(i3)[k_(i)−171, k_(i)−2], W_(i4)[k_(i)−172, k_(i)−3], W_(i5)[k_(i)−173, k_(i)−4], W_(i6)[k_(i)−174, k_(i)−5], W_(i7)[k_(i)−175, k_(i)−6], W_(i8)[k_(i)−176, k_(i)−7], W_(i9)[k_(i)−177, k_(i)−8], W_(i10)[k_(i)−168, k_(i)−1], and W_(i11)[k_(i)−179, k_(i)+3], may be different in size, and meanwhile the manners of determining whether at least a part of data in a window meets a preset condition may also be different. In all embodiments, according to the rule preset on the deduplication server 103, a manner of determining whether at least a part of data in the window W_(i1) meets the preset condition C₁ is certainly the same as a manner of determining whether at least a part of data in a window W_(j1) meets the preset condition C₁, a manner of determining whether at least a part of data in W_(i2) meets the preset condition C₂ is certainly the same as a manner of determining whether at least a part of data in W_(j2) meets the preset condition C₂, . . . , and a manner of determining whether at least a part of data in a window W_(iM) meets a preset condition C_(M) is certainly the same as a manner of determining whether at least a part of data in a window W_(jM) meets the preset condition C_(M), which are not described herein again.

According to the embodiments of the present invention shown in FIG. 20 to FIG. 33, the rule is preset on the deduplication server 103, k_(a), k_(i), k_(j), k_(l), and k_(m) are potential dividing points obtained in the search for a dividing point along a direction of searching for a data stream dividing point, and k_(a), k_(i), k_(j), k_(l), and k_(m) all follow the rule. In this embodiment of the present invention, the window W_(x)[k−A_(x), k+B_(x)] represents a specific range, and data is selected in the specific range to determine whether the data meets the preset condition C_(x). Specifically, in the specific range, a part of data may be selected or all data may be selected to determine whether the data meets the preset condition C_(x). Reference may be made to the window W_(x)[k−A_(x), k+B_(x)] for the concept of a window specifically used in this embodiment of the present invention, which is not described herein again.

In the window W_(x)[k−A_(x) k+B_(x)], (k−A_(x)) and (k+B_(x)) represent two boundaries of the window W_(x)[k−A_(x), k+B_(x)], where (k−A_(x)) represents a boundary, which is in a direction opposite to the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)], and (k_(j)+B_(x)) represents a boundary, which is in the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)]. Specifically, in the embodiment of the present invention, the direction of searching for a data stream dividing point shown in FIG. 20 to FIG. 33 is from left to right; therefore, (k−A_(x)) represents a boundary (that is, a left boundary), which is in a direction opposite to the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)], and (k+B_(x)) represents a boundary (that is, a right boundary), which is in the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)]. If the direction of searching for a data stream dividing point shown in FIG. 20 to FIG. 33 is from right to left, (k−A_(x)) represents a boundary (that is, a right boundary), which is in a direction opposite to the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)], and (k+B_(x)) represents a boundary (that is, a left boundary), which is in the direction of searching for a data stream dividing point relative to the potential dividing point k, of the window W_(x)[k−A_(x), k+B_(x)].

A person of ordinary skill in the art may be aware that, in conjunction with various exemplary units and algorithm steps described in FIG. 20 to FIG. 33 of the embodiments of the present invention, a key feature in the embodiments of the present invention may be combined with other technologies and presented in a more complex form; however, the key feature of the present invention is still included. An alternative dividing point may be used in a real environment. For example, in an implementation manner, according to a rule preset on a deduplication server 103, for a potential dividing point k_(i), 11 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)] are determined, where x indicates consecutive natural numbers from 1 to 11. When at least a part of data in each window W_(x)[k−A_(x), k+B_(x)] of the 11 windows meets the preset condition C_(x), the potential dividing point k_(i) is a data stream dividing point. When no dividing point is found after a set maximum data chunk is exceeded, a preset rule for the alternative point may be used. The preset rule for the alternative point is similar to the rule preset on the deduplication server 103, and the preset rule for the alternative point is: for example, for a potential dividing point k_(i), determining 10 windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], where x indicates consecutive natural numbers from 1 to 10. When it is determined that at least a part of data in each window W_(x) [k−A_(x), k+B_(x)] of the 10 windows meets the preset condition C_(x), the potential dividing point k_(i) is a data stream dividing point. When no data stream dividing point is found after a set maximum data chunk is exceeded, an end position of the maximum data chunk serves as a forced dividing point.

According to the embodiments of the present invention shown in FIG. 20 to FIG. 33, a rule is preset on the deduplication server 103, and in the rule, M windows are determined for a potential dividing point k. It is not necessarily required that there be a potential dividing point k in advance, and the potential dividing point k may be determined by using the determined M windows.

A person of ordinary skill in the art may be aware that, in combination with the examples described in the embodiments disclosed in this specification, units and algorithm steps may be implemented by electronic hardware or a combination of computer software and electronic hardware. Whether the functions are performed by hardware or software depends on particular applications and design constraint conditions of the technical solutions.

It may be clearly understood by a person skilled in the art that, for the purpose of convenient and brief description, for a detailed working process of the foregoing system, apparatus, and unit, reference may be made to a corresponding process in the foregoing method embodiments, and details are not described herein again.

In the several provided embodiments, it should be understood that the disclosed system and method may be implemented in other manners. For example, the described apparatus embodiment is merely exemplary. For example, the unit division is merely logical function division and may be other division in actual implementation. For example, a plurality of units or components may be combined or integrated into another system, or some features may be ignored or not performed. In addition, the displayed or discussed mutual couplings or direct couplings or communication connections may be implemented through some interfaces. The indirect couplings or communication connections between the apparatuses or units may be implemented in electronic, mechanical, or other forms.

The units described as separate parts may or may not be physically separate, and parts displayed as units may or may not be physical units, may be located in one position, or may be distributed on a plurality of network units. Some or all of the units may be selected according to actual needs to achieve the objectives of the solutions of the embodiments.

In addition, functional units in the embodiments of the present invention may be integrated into one processing unit, or each of the units may exist alone physically, or two or more units are integrated into one unit.

When the functions are implemented in the form of a software functional unit and sold or used as an independent product, the functions may be stored in a computer-readable non-volatile storage medium. Based on such an understanding, the technical solutions of the present invention essentially, or the part contributing to the prior art, or some of the technical solutions may be implemented in a form of a software product. The software product is stored in a non-volatile storage medium, and includes several instructions for instructing a computer device (which may be a personal computer, a server, or a network device) to perform all or some of the steps of the methods described in the embodiments of the present invention. The foregoing non-volatile storage medium includes: any medium that can store program code, such as a USB flash drive, a removable hard disk, a read-only memory (ROM), a magnetic disk, or an optical disc. 

What is claimed is:
 1. A method performed by a server processor executing computer instructions stored in a server memory for searching for a data stream dividing point for dividing data into a plurality of portions to facilitate data storage according to a rule, wherein the rule comprising: for a potential dividing point k, determining M windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], wherein x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers for establishing a potential dividing point k, the method comprising: (a) determining a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for a current potential dividing point k_(i) according to the rule, wherein i and z are integers, and 1≦z≦M; (b) determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z); and when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skipping N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along a direction of searching for a data stream dividing point, wherein N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, and performing step (a); and (c) when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), selecting the current potential dividing point k_(i) as a data stream dividing point.
 2. The method according to claim 1, wherein the rule further comprises that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f)| and C_(e)=C_(f).
 3. The method according to claim 2, wherein the rule further comprises that A_(e) and A_(f) are positive integers.
 4. The method according to claim 2, wherein the rule further comprises A_(e)−1=A_(f) and B_(e)+1=B_(f).
 5. The method according to claim 1, wherein determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 6. The method according to claim 5, wherein the determining, by using a random function, whether the at least a part of data in W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) is specifically: determining, by using a hash function, whether the at least a part of data in W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 7. The method according to claim 1, wherein when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and according to the rule, a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], wherein the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.
 8. The method according to claim 5, wherein selecting F bytes in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, wherein F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes can be represented as: $\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F^{*}H},1} & a_{{F^{*}H},2} & \ldots & a_{{F^{*}H},8} \end{pmatrix},$ wherein when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, wherein a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8) a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as: $\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{{aF}^{*}H},1} & V_{{{aF}^{*}H},2} & \ldots & V_{{{aF}^{*}H},8} \end{pmatrix},$ F*H*8 random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as: $\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F^{*}H},1} & h_{{F^{*}H},2} & \ldots & h_{{F^{*}H},8} \end{pmatrix},$ random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1), S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 9. A server for searching for a data stream dividing point for dividing data into a plurality of portions to facilitate data storage according to a rule, wherein the rule comprising: for a potential dividing point k, determining M windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], wherein x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers for establishing a potential dividing point k, wherein the server comprises a central processing unit and a primary memory, the central processing unit communicates with the primary memory to execute computer instructions stored therein to perform the steps of: (a) determining a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for a current potential dividing point k, according to the rule, wherein i and z are integers, and 1≦z≦M; (b) determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z); (c) when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skipping N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along a direction of searching for a data stream dividing point, wherein N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, and performing step (a); and (d) when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), selecting the current potential dividing point k_(i) as a data stream dividing point.
 10. The server according to claim 9, wherein the rule further comprises that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f)| and C_(e)=C_(f).
 11. The server according to claim 10, wherein the rule further comprises that A_(e) and A_(f) are positive integers.
 12. The server according to claim 10, wherein the rule further comprises A_(e)−1=A_(f) and B_(e)+1=B_(f).
 13. The server according to claim 9, wherein the central processing unit is specifically configured to determine, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 14. The server according to claim 13, wherein the central processing unit is specifically configured to determine, by using a hash function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 15. The server according to claim 9, wherein when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and according to the rule, a left boundary of a window W_(iC)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], wherein the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.
 16. The server according to claim 14, wherein the determining, by the central processing unit by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically comprises: selecting F bytes in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, wherein F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes can be represented as: $\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F^{*}H},1} & a_{{F^{*}H},2} & \ldots & a_{{F^{*}H},8} \end{pmatrix},$ wherein when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, wherein a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as: $\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{{aF}^{*}H},1} & V_{{{aF}^{*}H},2} & \ldots & V_{{{aF}^{*}H},8} \end{pmatrix},$ F*H*8 random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as: $\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F^{*}H},1} & h_{{F^{*}H},2} & \ldots & h_{{F^{*}H},8} \end{pmatrix},$ random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1), S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 17. A computer-readable storage medium, wherein the computer-readable storage medium is configured to store executable computer instructions for execution by a processor that prompts the processor to determine a potential dividing point k for dividing data into a plurality of portions to facilitate data storage according to a rule, wherein the rule comprising: for a potential dividing point k, determining M windows W_(x)[k−A_(x), k+B_(x)] and a preset condition C_(x) corresponding to the window W_(x)[k−A_(x), k+B_(x)], wherein x indicates consecutive natural numbers from 1 to M, M≧2, and A_(x) and B_(x) are integers; and for: (a) determining a corresponding window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] for a current potential dividing point k_(i) according to the rule, wherein i and z are integers, and 1≦z≦M; (b) determining whether at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets a preset condition C_(z); and when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), skipping N minimum units U for searching for a data stream dividing point from the current potential dividing point k_(i) along a direction of searching for a data stream dividing point, wherein N*U is not greater than ∥B_(z)∥+max_(x)(∥A_(x)∥), so as to obtain a new potential dividing point, and performing step (a); and (c) when at least a part of data in each window W_(ix)[k_(i)−A_(x), k_(i)+B_(x)] of M windows of the current potential dividing point k_(i) meets the preset condition C_(x), selecting the current potential dividing point k_(i) as a data stream dividing point.
 18. The computer-readable storage medium according to claim 17, wherein the rule further comprises that at least two windows W_(ie)[k_(i)−A_(e), k_(i)+B_(e)] and W_(if)[k_(i)−A_(f), k_(i)+B_(f)] meet conditions |A_(e)+B_(e)|=|A_(f)+B_(f)| and C_(e)=C_(f).
 19. The computer-readable storage medium according to claim 18, wherein the rule further comprises that A_(e) and A_(f) are positive integers.
 20. The computer-readable storage medium according to claim 18, wherein the rule further comprises A_(e)−1=A_(f) and B_(e)+1=B_(f).
 21. The computer-readable storage medium according to claim 17, wherein: determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 22. The computer-readable storage medium according to claim 21, wherein determining, by the server by using a hash function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z).
 23. The computer-readable storage medium according to claim 17, wherein when the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] does not meet the preset condition C_(z), the N minimum units U for searching for a data stream dividing point are skipped from the current potential dividing point k_(i) along the direction of searching for a data stream dividing point, so as to obtain the new potential dividing point, and according to the rule, a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point coincides with a right boundary of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] or a left boundary of a window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] that is determined for the new potential dividing point falls within a range of the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], wherein the window W_(ic)[k_(i)−A_(c), k_(i)+B_(c)] determined for the new potential dividing point is a window ranking the first in a sequence, which is obtained according to the direction of searching for a data stream dividing point, of M windows that are determined for the new potential dividing point according to the rule.
 24. The computer-readable storage medium according to claim 21, wherein the determining, by using a random function, whether the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z) specifically comprises: selecting F bytes in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)], and using the F bytes repeatedly H times to obtain F*H bytes in total, wherein F≧1, each byte is formed by 8 bits, which are denoted as a_(m,1), . . . , and a_(m,8), representing the 1st bit to the 8th bit of an mth byte in the F*H bytes, bits corresponding to the F*H bytes can be represented as: $\begin{pmatrix} a_{1,1} & a_{1,2} & \ldots & a_{1,8} \\ a_{2,1} & a_{2,2} & \ldots & a_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ a_{{F^{*}H},1} & a_{{F^{*}H},2} & \ldots & a_{{F^{*}H},8} \end{pmatrix},$ wherein when a_(m,n)=1, V_(am,n)=1, and when a_(m,n)=0, V_(am,n)=−1, wherein a_(m,n) represents any one of a_(m,1), . . . , and a_(m,8), a matrix V_(a) is obtained according to a conversion relationship between a_(m,n) and V_(am,n) from the bits corresponding to the F*H bytes, the matrix V_(a) is represented as: $\begin{pmatrix} V_{{a\; 1},1} & V_{{a\; 1},2} & \ldots & V_{{a\; 1},8} \\ V_{{a\; 2},1} & V_{{a\; 2},2} & \ldots & V_{{a\; 2},8} \\ \vdots & \vdots & \vdots & \vdots \\ V_{{{aF}^{*}H},1} & V_{{{aF}^{*}H},2} & \ldots & V_{{{aF}^{*}H},8} \end{pmatrix},$ F*H*8 random numbers are selected from random numbers following normal distribution to form a matrix R, the matrix R is represented as: $\begin{pmatrix} h_{1,1} & h_{1,2} & \ldots & h_{1,8} \\ h_{2,1} & h_{2,2} & \ldots & h_{2,8} \\ \vdots & \vdots & \vdots & \vdots \\ h_{{F^{*}H},1} & h_{{F^{*}H},2} & \ldots & h_{{F^{*}H},8} \end{pmatrix},$ random numbers in an mth row of the matrix V_(a) and an mth row of the matrix R are multiplied and products are added to obtain a value, which is specifically represented as S_(am)=V_(am,1)*h_(m,1)+V_(am,2)*h_(m,2)+ . . . +V_(am,8)*h_(m,8), S_(a1) S_(a2), . . . , and S_(aF*H) are obtained in a same way, a quantity K of values greater than 0 among S_(a1), S_(a2), . . . , and S_(aF*H) is counted, and when K is an even number, the at least a part of data in the window W_(iz)[k_(i)−A_(z), k_(i)+B_(z)] meets the preset condition C_(z). 